Получение имени файла из запроса POST в Spray-can

Я использую Spray-can для размещения службы REST, в которую пользователь сможет загрузить файл. Блок кода, который прослушивает входящие запросы, приведен ниже:

def receive: Receive = {
case _: Http.Connected => sender ! Http.Register(self)

case req@HttpRequest(HttpMethods.POST, Uri.Path("/upload"), headers, entity, _) =>
  logger.info("Received file upload request.")

// Process the uploaded data using the 'entity' object

Я загружаю файл с помощью этой команды curl:

curl --data-binary @inputFile.csv 'devserver:8998/upload?tenant=DressShop&facility=CityCenter&customer=Jimmy'

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу выбрать имя файла "inputFile.csv" из запроса, хотя я получаю данные из объекта "entity". Я попытался просмотреть API, но не смог найти способ получить имя файла.

Моя цель - разрешить загрузку только CSV-файлов.

2 ответа

Вам необходимо обработать объект как данные формы, используя as

as[MultipartFormData]

Затем вы можете получить имя файла из полей заголовка:

    def processFormData(data: MultipartFormData) = {
        var attForm = ""
        val bodyPart = data.fields(0)

        data.fields foreach {
            bodyPart => println(bodyPart.headers.find(h=> h.is("content-disposition")).get.value)
        }

    }

Это может помочь:

Имя файла можно найти в parameters,

Другие вопросы по тегам