首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过scalaj-http库发送多部分/数据表单?

如何通过scalaj-http库发送多部分/数据表单?
EN

Stack Overflow用户
提问于 2017-06-25 07:22:05
回答 1查看 1.4K关注 0票数 1

我想通过scalaj-http库实现以下curl命令:

代码语言:javascript
复制
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是一个本地文件。

我尝试了以下代码,但它不起作用:

代码语言:javascript
复制
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的原型是:

代码语言:javascript
复制
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应该是一个本地文件,但我不确定应该将什么传递给其他三个参数。

EN

回答 1

Stack Overflow用户

发布于 2017-06-25 08:35:24

来自cURL for -F (重点介绍)的cURL页面:

(HTTP)这使得curl可以模仿用户按下submit按钮的填入形式。这导致根据RFC 2388使用内容类型多部分/表单数据发布数据。,这允许上传二进制文件等。若要强制“content”部件成为文件,请在文件名前加上@符号。要从文件中获取内容部分,请在文件名前加上符号<。@和<之间的区别是@使文件作为文件上载附加在post中,而<生成文本字段并从文件中获取该文本字段的内容。

对应的内容将要求您以编程方式读取文件,并以Array[Byte]的形式提供内容。

代码语言:javascript
复制
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))
   .asString
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44744145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档