xmlhttprequest - 如何使用 XMLHttpRequest 和 FormData 对象在 multipart/form-data 上设置我自己的边界

标签 xmlhttprequest multipartform-data boundary

当使用 FormData 对象将文件附加到请求时,我一直试图找到一种方法来在 XMLHttpRequest 对象上设置我自己的边界。我看过很多关于这个的帖子,每个人都说“不要设置边界,它会自动为你生成。”这不是我想要的。让我解释一下我需要什么,这样我就不会得到这些回应。

我有一个 web 服务端点,我向它发送一个多部分/表单数据请求,其中包含两个图像和一些 json 数据。由于 WCF 无法通过多部分请求进行解析,因此我使用一些开源代码构建了自己的解析器。它的工作方式是,我定义了一个边界,用于分隔请求的每个部分,从那里开始一切正常。因此,我必须能够将边界设置为服务器代码所期望的确切值,以便我的解析类能够在输入流中找到任何内容。

我知道这可以做到,因为我已经使用 Fiddler 这样做了,并且同事能够在我们正在构建的调用我的方法的应用程序中这样做,但我正在尝试使用名为 Postman 的 Chrome 浏览器应用程序使其工作使用 FormData 对象发送多部分请求。除了请求生成自己的边界(通常类似于:

----WebKitFormBoundaryQUWQnB6c7TzNzdcz

最后附加的字符串是随机生成的,因此它永远不会相同,因此我无法使用此工具来测试我的端点,因为服务器无法知道要查找的边界。

我已经尝试使用我的边界设置 Content-Type header ,虽然请求显示 header 被添加到请求中,但正文仍然使用随机边界。

所以问题是如何告诉 FormData 对象和/或 XMLHttpRequest 对象使用我的边界而不是正在生成的随机边界?

我无法想象这是一件不常见的事情,我的意思是到目前为止,我调用使用 multipart/form-data 的服务的所有经验都告诉我在 api 中设置边界的内容,但没有人说“只是不要不设置它,我们将使用生成的随机垃圾......”

同样作为视觉效果,这是我在标题中看到的内容:
Request Headers
POST /DHICachet.svc/json/DepositCheck HTTP/1.1
Host: dhiibews.securexfr.com
Connection: keep-alive
Content-Length: 514696
Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11
Content-Type: multipart/form-data; boundary=myboundary
Cache-Control: no-cache
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: ASP.NET_SessionId=zdepe2nhkz0vbhxiulzc2qq1

Request Payload
------WebKitFormBoundaryQUWQnB6c7TzNzdcz
Content-Disposition: form-data; name="item"; filename="Screen shot 2012-09-03 at 4.00.10 AM.png"
Content-Type: image/png


------WebKitFormBoundaryQUWQnB6c7TzNzdcz--

请注意,即使我的边界设置为 myboundary在请求 header 中,主体只是将在幕后生成的任何边界放入其中。另请注意,如果我不设置该 header ,它只会将其与随机边界一起放入。

最佳答案

这并不能真正回答我的问题,但我确实找到了解决方法。我突然意识到,通过对内容类型 header 进行一些字符串数学运算,我实际上可以检测到正在通过的边界。我刚刚在我的代码中添加了以下内容:

string contenttype = _ctx.IncomingRequest.Headers["Content-Type"].ToString();
string boundary = contenttype.Substring(contenttype.IndexOf('=') + 1);

这允许我接受任何调试边界。但是,我仍然需要我们特定的生产边界。

关于xmlhttprequest - 如何使用 XMLHttpRequest 和 FormData 对象在 multipart/form-data 上设置我自己的边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14744353/

相关文章:

javascript - 使用jquery异步发送$FILES数据

java - MULTIPART_FORM_DATA : No injection source found for a parameter of type public javax. ws.rs.core.Response

c++ - 滤波器卷积反射边界

http - 服务器如何知道发送的请求带有凭据?

javascript - 浏览器中的 SOAP 请求 JavaScript 未给出响应

ajax - 我们如何将响应 header 设置为 Access-Control-Allow-Origin : * in jQuery Ajax

c# - 在 Visual Studio c# 中子类 MultipartStreamProvider 失败?

android - 完整文件不会在 Retrofit2 上上传

php - 创建 MIME 边界的规则是什么(对于邮件附件)

java - 用图案填充形状(可能未闭合)