首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为多部分/表单数据请求在scalaj中将文件添加为param?

如何为多部分/表单数据请求在scalaj中将文件添加为param?
EN

Stack Overflow用户
提问于 2018-07-13 18:37:58
回答 2查看 778关注 0票数 0

我正在尝试使用scalaj-http发送twitter上传的帖子请求。我附上了他们对请求所需的文件。我遇到麻烦的部分是试图将实际的二进制文件作为"media“的参数传递。我似乎只能看到如何做postMulti,它只是文件,然后添加参数,而不是将数据作为参数实际传递。

代码语言:javascript
复制
val appendResponse = Http(twitterApiUrl)
  .postMulti(MultiPart("media", "Output.bin", "application/mac-binary", byteArray))
  .postForm(Seq("command" -> "APPEND", "media_id" -> twitterMediaID, "segment_index" -> "0"))
  .oauth(consumer = consumer, token = access)
  .asString

https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload-append

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-16 19:12:25

https://github.com/scalaj/scalaj-http/issues/170

此github问题链接中记录了该问题的修复。

票数 0
EN

Stack Overflow用户

发布于 2018-07-13 20:17:38

我认为您应该使用"media“而不是”MultiPart“作为您的MultiPart的名称,而不是在您的params中使用"media”。

更新:我使用跟踪请求,没有发现任何在我看来不对劲的地方(在将“输出”改为“媒体”之后)。下面的代码实际上并不是针对您的代码的修复,而是更多的解决方法:

代码语言:javascript
复制
val appendResponse = Http("https://upload.twitter.com/1.1/media/upload.json")
    .postForm
    .params(
        Seq(
            "command" -> "APPEND",
            "media_id" -> twitterMediaID,
            "segment_index" -> "0",
            "media_data" -> Base64.getEncoder.encodeToString(byteArray)
        )
    )
    .oauth(consumer, token)
    .asString

这给了我204个回复,我没有进一步测试我是否可以上传一个完整的文件。

还要注意的是,这使用了media_data (base64)版本,也使用了‘application/x form-urlencoded’,而不是文档中指定的'multipart/form-data‘。因此,根据文档,这是不正确的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51331094

复制
相关文章

相似问题

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