2015-04-28 4 views
2

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

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

case [email protected](HttpMethods.POST, Uri.Path("/upload"), headers, entity, _) => 
    logger.info("Received file upload request.") 

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

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

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

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

Моя цель - обеспечить, чтобы я разрешал загрузку только файлов csv.

ответ

1

Вы должны обрабатывать объект как данные формы с использованием 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) 
     } 

    } 
0

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

enter image description here

Имя файла может быть найдено в parameters.