我尝试在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--"
答案 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)
}