【问题标题】:POSTing file to Jenkins fails向 Jenkins 发布文件失败
【发布时间】:2011-08-16 12:59:46
【问题描述】:

我正在尝试通过 multipart/form-data 从 Python 向 Jenkins 发布一个文件。请求正文如下所示:

--===============1849003312==
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Disposition: file; name="file0"; filename="meta.xml"

PHhtbD4NCjwveG1sPg0K

--===============1849003312==--

然而,这会导致 Jenkins 在其末尾引发异常,其中最相关的部分如下:

Exception: <br>Stacktrace: <pre>org.apache.commons.fileupload.FileUploadException: Stream ended unexpectedly
   at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:381)
   at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
   at org.kohsuke.stapler.RequestImpl.parseMultipartFormData(RequestImpl.java:767)
   at org.kohsuke.stapler.RequestImpl.getSubmittedForm(RequestImpl.java:782)

我的 POST 请求有什么问题?

编辑: 请求头如下:

内容类型:

multipart/form-data; boundary="===============1849003312=="    

MIME 版本:

1.0

【问题讨论】:

  • POST 请求的 Content-Type 头呢?请同时发布它的价值,这很重要。
  • Content-Type 标头中的边界与 POST 正文中使用的边界不匹配。
  • @Wladimir Palant 哎呀,这是因为每次运行都会重新生成它。我会更新它们。
  • 你能发布创建请求的完整代码吗?

标签: python http-post jenkins multipartform-data


【解决方案1】:

我认为Content-Disposition: file; 应该替换为Content-Disposition: attachment;FileUploadBase 的源代码没有提到“file”,RFC 2183 也没有将“file”列为 content-disposition 的值。

【讨论】:

  • 我尝试将 Content-Disposition 的 'file' 更改为 'attachment',实际上并没有什么不同(发生相同的异常)。还查看 FileUploadBase.java 源代码,看起来内容处置与引发的异常无关。
猜你喜欢
  • 2013-02-20
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 2013-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
相关资源
最近更新 更多