Scala编码multipart / form-data主体

时间:2014-12-19 13:28:56

标签: scala multipartform-data

我尝试在multipart / form-data请求中发送文件。

我的问题是在服务器端(在我的情况下是PHP)文件内容比预期的大两倍。

我应该如何转换数据?

我的代码是

val boundary = randomBoundary

val CrLf = "\r\n"
val body = (
  for (fileInfo ← files)
  yield s"--$boundary${CrLf}Content-Disposition: form-data; name=AttachedFile1; filename=${fileInfo.fileName}$CrLf$CrLf" +
    s"Content-Type: application/octet-stream$CrLf$CrLf" +
    new String(fileInfo.data) // fileInfo.data has type Array[Byte]
).mkString(CrLf) + s"$CrLf--$boundary--"

2 个答案:

答案 0 :(得分:0)

不要使用字符串发送二进制数据;字符串是JVM上的UTF-8编码字符数据。

您需要一个Array[Byte],任何java.io.OutputStream都可以轻松发送(到目标服务器)。

答案 1 :(得分:0)

我找到了答案!

class DispatchTest extends FunSpec {

   import dispatch.classic./\
   import dispatch.classic.mime.Mime.MimeRequestTerms
   import dispatch.classic._

   val fi = new File("/Users/alexkvak/kr1.jpg")
   val fileContent = Files.readAllBytes(fi.toPath)

   val multiPart = new MimeRequestTerms(/\) <<*("party-file", "FileName.jpg", fileContent)

   // some post data
   multiPart << Map("fieldName" → "fieldValue")

   val r = multiPart.copy(host = new HttpHost("localhost"), path = "/upload.php")

   Http(r as_str)    
}