2015-05-09 3 views
4

У меня есть следующий вид:спрей-клиент форма загрузки с файлом

<form action="/upload" method="POST" enctype="multipart/form-data"> 
     <input type="text" name="name"> 
     <input type="file" name="file"> 
     <input type="submit" value="Upload image"> 
    </form> 

Я хочу, чтобы отправить запрос с name и file

Я использую spray-client для этого, когда я отправить файл только эту работу штраф:

val file = "my-image.png" 
val bis = new BufferedInputStream(new FileInputStream(file)) 
val bArray = Stream.continually(bis.read).takeWhile(-1 !=).map(_.toByte).toArray 

val url = "http://example.com/upload" 

val httpData = HttpData(bArray) 
val httpEntity = HttpEntity(ContentTypes.`image/png`, httpData).asInstanceOf[HttpEntity.NonEmpty] 
val formFile = FormFile("my-image", httpEntity) 
val bodyPart = BodyPart(formFile, "my-image") 
val req = Post(url, MultipartFormData(Map("spray-file" -> bodyPart))) 

val pipeline = (addHeader("Content-Type", "multipart/form-data") 
    ~> sendReceive 
) 

pipeline(req) 

Но как отправить в то же время файл и поля?

+1

Может быть полезно: https://github.com/spray/spray/blob/269ce885d3412e555237bb328aae89457f57c660/spray-httpx/src/test/scala /spray/httpx/FormFieldSpec.scala#L31 – sap1ens

+0

Возможный дубликат [Как обработать файл, загруженный через HTML-форму в Spray/Scala/Java?] (http://stackoverflow.com/questions/7503307/how-can -i-process-a-file-uploaded-through-a-html-form-in-spray-scala-java) – mayacr86

ответ

3

Вы почти у цели. Единственное, что не хватает добавляет некоторые BodyPart S к Post запросу:

def headers(params: (String, String)*) = 
    Seq(HttpHeaders.`Content-Disposition`("form-data", Map(params: _*))) 

val api_key = "abcdef123456" 
val api_secret = "a42ecd098a5389==" 

val formData = MultipartFormData(Seq(
    BodyPart(api_key, headers("name" -> "api_key")), 
    BodyPart(api_secret, headers("name" -> "api_secret")), 
    BodyPart(formFile, "img") 
)) 

val req = Post(url, formData) 
+0

Я сдаюсь. Что такое «api_key» и «api_secret», учитывая, что они не упоминаются нигде? –

+0

Ах. Понял. «api_key» - это имя параметра, и вы указываете * значение * в качестве первого аргумента BodyPart. Возможно, вы можете внести поправки для разъяснения? Или я должен был это понимать? –

+0

Чтобы быть ясным, вышеупомянутый ответ * * полезен, тем не менее. благодаря –

Смежные вопросы