我想通过scalaj-http库实现以下curl命令:
curl -X POST --header "Content-Type:multipart/form-data;charset=UTF-8" -F file=@1.csv http://10.100.100.100:8028/compute其中1.csv是一个本地文件。
我尝试了以下代码,但它不起作用:
val url = "http://10.100.100.100:8028/compute"
scalaj.http.Http(url).
postMulti(MultiPart("file", "1.csv", "text/text", ""))
.asString我怀疑MultiPart("file", "1.csv", "text/text", "")是不对的。
MultiPart的原型是:
object MultiPart {
def apply(name: String, filename: String, mime: String, data: String): MultiPart = {
apply(name, filename, mime, data.getBytes(HttpConstants.utf8))
}
def apply(name: String, filename: String, mime: String, data: Array[Byte]): MultiPart = {
MultiPart(name, filename, mime, new ByteArrayInputStream(data), data.length, n => ())
}
}我知道参数filename应该是一个本地文件,但我不确定应该将什么传递给其他三个参数。
发布于 2017-06-25 08:35:24
来自cURL for -F (重点介绍)的cURL页面:
(HTTP)这使得curl可以模仿用户按下submit按钮的填入形式。这导致根据RFC 2388使用内容类型多部分/表单数据发布数据。,这允许上传二进制文件等。若要强制“content”部件成为文件,请在文件名前加上@符号。要从文件中获取内容部分,请在文件名前加上符号<。@和<之间的区别是@使文件作为文件上载附加在post中,而<生成文本字段并从文件中获取该文本字段的内容。
对应的内容将要求您以编程方式读取文件,并以Array[Byte]的形式提供内容。
import java.nio.file.{Files, Paths}
import scalaj.http
val bytes: Array[Byte] = Files.readAllBytes(Paths.get("/path/to/file"))
val url = "http://10.100.100.100:8028/compute"
val result =
Http(url)
.postMulti(MultiPart("file", "1.csv", "text/csv", bytes))
.asStringhttps://stackoverflow.com/questions/44744145
复制相似问题