以下代码按预期工作。在 Google Chrome 上打开页面 "https://wiki.epfl.ch/",并在开发者控制台上执行此代码。注意:页面 "https://wiki.epfl.ch/test.php" 不存在,因此加载失败,但这不是问题。
问题在于请求文件是二进制文件(PDF),并且文字被“破坏”了。它报告的大小为57234字节,而实际文件大小(使用
问题是:如何获取和发送二进制数据,而不被修改?
我尝试将
注意:我正在开发的网页不在wiki.epfl.ch上。 我提供这个例子是为了让用户尝试它(并避免“跨域资源共享”问题)。我的“test.php”页面是用php编写的,
注意:我正在开发的网页不在wiki.epfl.ch上。 我提供这个例子是为了让用户尝试它(并避免“跨域资源共享”问题)。我的“test.php”页面是用php编写的,
以下代码正常运行。在Google Chrome中打开页面"https://wiki.epfl.ch/",并在开发者控制台上执行此代码。请注意:"https://wiki.epfl.ch/test.php"页面不存在,因此无法加载,但这不是问题。
response = await fetch("https://wiki.epfl.ch/lapa-studio/documents/DTS/laser%20tutorial.pdf");
response.text().then(function(content) {
formData = new FormData();
console.log(content.length);
console.log(content);
formData.append("content", content);
fetch("https://wiki.epfl.ch/test.php", {method: 'POST', body: formData});
})
它记录:
content.length: 57234
content: %PDF-1.3
%���������
4 0 obj
<< /Length 5 0 R /Filter /FlateDecode >>
stream
x��K��F�����;¢�
...
前往“开发人员网络”选项卡,选择“test.php”页面,导航至“请求的有效负载:”,您可以看到此内容:
------WebKitFormBoundaryOJOOGb7N43BxCRlv
Content-Disposition: form-data; name="content"
%PDF-1.3
%���������
4 0 obj
<< /Length 5 0 R /Filter /FlateDecode >>
stream
...
------WebKitFormBoundaryOJOOGb7N43BxCRlv
问题在于请求文件是二进制文件(PDF),并且文字被“破坏”了。它报告的大小为57234字节,而实际文件大小(使用
wget
命令获取)为60248字节。问题是:如何获取和发送二进制数据,而不被修改?
我尝试将
response.text()
替换为response.blob()
,代码如下:response = await fetch("https://wiki.epfl.ch/lapa-studio/documents/DTS/laser%20tutorial.pdf");
response.blob().then(function(content) {
console.log(content.size);
console.log(content);
formData = new FormData();
formData.append("content", content);
fetch("https://wiki.epfl.ch/test.php", {method: 'POST', body: formData});
})
现在我得到了这个日志,文件大小是正确的:
content.size: 60248
content: Blob(60248) {size: 60248, type: "application/pdf"}
然而,前往开发者网络选项卡,选择“test.php”页面,导航到“请求有效载荷:”,它显示发送了一个空载荷:
------WebKitFormBoundaryYoibuD14Ah2cNGAd
Content-Disposition: form-data; name="content"; filename="blob"
Content-Type: application/pdf
------WebKitFormBoundaryYoibuD14Ah2cNGAd--
注意:我正在开发的网页不在wiki.epfl.ch上。 我提供这个例子是为了让用户尝试它(并避免“跨域资源共享”问题)。我的“test.php”页面是用php编写的,
$_POST ['content']
在使用response.text()
时返回内容,但在使用response.blob()
时返回空白。 因此,即使开发人员网络选项卡中的“请求有效载荷:”未显示二进制数据,该代码片段仍然无法正常工作。注意:我正在开发的网页不在wiki.epfl.ch上。 我提供这个例子是为了让用户尝试它(并避免“跨域资源共享”问题)。我的“test.php”页面是用php编写的,
$_POST ['content']
在使用response.text()
时返回内容,但在使用response.blob()
时返回空白。 因此,即使开发人员网络选项卡中的“请求有效载荷:”未显示二进制数据,该代码片段仍然无法正常工作。
response.blob()
返回了一个Blob对象。Body.blob()
与问题有什么关联? - guest271314blob()
)确实会发送数据。我猜测Chrome开发工具不显示该值,因为它将是乱码的二进制数据,但如果您在Fiddler中观察请求,您可以看到数据正在发送。您有办法检查是否正确接收了数据吗?据我所知,https://wiki.epfl.ch/test实际上并没有显示任何文件接收的确认信息(它是否打算用于此目的?)。 - JLRishe