当前位置: 首页 > 知识库问答 >
问题:

如何通过修改发送多部分/表单数据?

伯博
2023-03-14
class Article(models.Model):
    author = models.CharField(max_length=256, blank=False)
    photo = models.ImageField()
@POST("/api/v1/articles/")
public Observable<CreateArticleResponse> createArticle(
        @Body Article article
);
@Multipart
@POST("/api/v1/articles/")
public Observable<CreateArticleResponse> createArticle(
        @Part("article") Article article,
        @Part("photo") TypedFile photo
);
$ curl -vX POST http://localhost:8000/api/v1/articles/ \
    -H "Content-Type: multipart/form-data" \
    -H "Accept:application/json" \
    -F "author=cURL" \
    -F "photo=@/home/user/Desktop/article-photo.png"
D  <--- HTTP 400 http://192.168.1.1/articles/ (2670ms)
D  Date: Mon, 20 Apr 2015 12:00:00 GMT
D  Server: WSGIServer/0.1 Python/2.7.8
D  Vary: Accept, Cookie
D  X-Frame-Options: SAMEORIGIN
D  Content-Type: application/json
D  Allow: GET, POST, HEAD, OPTIONS
D  OkHttp-Selected-Protocol: http/1.0
D  OkHttp-Sent-Millis: 1429545450469
D  OkHttp-Received-Millis: 1429545453120
D  {"author":["This field is required."],"photo":["No file was submitted."]}
D  <--- END HTTP (166-byte body)
E  400 BAD REQUEST

这是在服务器端作为request.data接收的内容:

ipdb> print request.data  
  <QueryDict: {u'article': [u'{"author":"me"}'], \
  u'photo': [<TemporaryUploadedFile: IMG_1759215522.jpg \
  (multipart/form-data)>]}>

如何转换multipart Confont数据类型中的文章对象?我读到改造可能允许使用转换器为这个。就我对文档的理解而言,它应该是实现reverfit.mime.typedoutput的东西。

多部分部件使用RestAdapter的转换器,或者它们可以实现TypedOutput来处理自己的序列化。

    null

共有1个答案

谭文林
2023-03-14

根据您的卷曲请求,您正在尝试创建如下所示的smth:

POST http://localhost:8000/api/v1/articles/ HTTP/1.1
User-Agent: curl/7.30.0
Host: localhost
Connection: Keep-Alive
Accept: application/json
Content-Length: 183431
Expect: 100-continue
Content-Type: multipart/form-data; boundary=----------------------------23473c7acabb

------------------------------23473c7acabb
Content-Disposition: form-data; name="author"

cURL
------------------------------23473c7acabb
Content-Disposition: form-data; name="photo"; filename="article-photo.png"
Content-Type: application/octet-stream

‰PNG

<!RAW BYTES HERE!>

M\UUÕ+4qUUU¯°WUUU¿×ß¿þ Naa…k¿    IEND®B`‚
------------------------------23473c7acabb--

通过改型适配器,可以通过下一种方式创建此请求:

@Multipart
@POST("/api/v1/articles/")
Observable<Response> uploadFile(@Part("author") TypedString authorString,
                                @Part("photo") TypedFile photoFile);

用法:

TypedString author = new TypedString("cURL");
File photoFile = new File("/home/user/Desktop/article-photo.png");
TypedFile photoTypedFile = new TypedFile("image/*", photoFile);
retrofitAdapter.uploadFile(author, photoTypedFile)
               .subscribe(<...>);
POST http://localhost:8000/api/v1/articles/ HTTP/1.1
Content-Type: multipart/form-data; boundary=32230279-83af-4480-abfc-88a880b21b19
Content-Length: 709
Host: localhost
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/2.3.0

--32230279-83af-4480-abfc-88a880b21b19
Content-Disposition: form-data; name="author"
Content-Type: text/plain; charset=UTF-8
Content-Length: 4
Content-Transfer-Encoding: binary

cUrl
--32230279-83af-4480-abfc-88a880b21b19
Content-Disposition: form-data; name="photo"; filename="article-photo.png"
Content-Type: image/*
Content-Length: 254
Content-Transfer-Encoding: binary

<!RAW BYTES HERE!>

--32230279-83af-4480-abfc-88a880b21b19--
 类似资料:
  • 问题内容: 我试图发送某种形式而不重新加载页面,并且试图理解幕后细节,因此不使用任何JavaScript库: 调用了upload_file(),但如果我做对了,则不会发送数据。请提供有关发送数据的正确方式的建议。 问题答案: 通过表单传递属性 如果您想获得回覆,可以使用这个 您可以通过或检索所有数据 更新有点晚 至于有关上传的@Varun问题,此代码无法直接处理文件上传,要使用此代码发送文件,您需

  • 我正在尝试用RestTemplate上传一个文件到带有Jetty的Raspberry Pi。在Pi上有一个运行的servlet: 这是我得到的输出: UI-elements.html已上传! org.springframework.web.multipart.support.StandardMultipartTtpServletRequest$StandardMultipartFile@47e76

  • 我正试图通过在Android中的改版将一些多部分表单数据发布到一个web服务中。web服务的API期望以下参数作为多部分表单数据的字段传递: 请求已成功发送到服务器,因此不会发生网络异常,但服务器端接收到的多部分表单值company_id和image为空 知道吗?谢谢你!

  • 问题内容: 我可以将文件作为多部分发送到servlet吗?我正在制作表单并将其作为多部分提交,但是以某种方式我没有收到成功上传它的回复。我不希望刷新页面,因此它必须由ajax进行。 问题答案: 只有使用XHR API(以前称为“ XHR2”或“ XHR Level 2”的一部分,当前称为“ XHR高级功能”)才有可能。 有了这个HTML, 您可以按以下方式上传: XHR将注意适当的头和请求主体编码

  • 问题内容: 我们想将图像文件作为multipart / form发送到后端,我们尝试使用html表单获取文件并将文件作为formData发送,这是代码 后端中的错误是 “嵌套异常为org.springframework.web.multipart.MultipartException:无法解析多部分servlet请求;嵌套异常为java.io.IOException:org.apache.tomc

  • 问题内容: 我一直在使用与杰克逊结合使用Apache CXF来消费和产生JSON文件的Web服务。 但是,服务的一种方法应该能够保存从移动应用程序上传的图像,该图像向我的Web服务发出多部分/表单数据POST请求,而且我不知道如何在我的内部处理这种内容类型上下文。我们通常创建“ Request”和“ Response”对象来使用和产生JSON,但是,在这种情况下,这恐怕不起作用。 这是请求格式: