PHP$\u文件为空,获取formdata
我正在尝试使用web fetch api和PHP上传文件。但由于某些原因,文件没有从web浏览器捕获(或发送?)到服务器。不过我仍然可以用curl发送文件PHP$\u文件为空,获取formdata,php,fetch,multipartform-data,Php,Fetch,Multipartform Data,我正在尝试使用web fetch api和PHP上传文件。但由于某些原因,文件没有从web浏览器捕获(或发送?)到服务器。不过我仍然可以用curl发送文件 async function send_files(url, files) { // files = [File(), File(), ...], url = localhost const formData = new FormData() for (const file of files) { formDa
async function send_files(url, files) { // files = [File(), File(), ...], url = localhost
const formData = new FormData()
for (const file of files) {
formData.append('files[]', file)
}
var result = await fetch(url, {
method: 'POST',
cors: 'same-origin',
headers: {
'Content-Type': 'multipart/form-data'
},
body: formData
})
return await result.json()
}
在PHP中,如果Iprint\r($\u文件)
返回一个空数组。现在我知道上传工作正在进行,因为curl确认了这一点:
curl-k-X POST-c-b-H“内容类型:多部分/表单数据”-F“文件[]=@file1”-F“文件[]=@file2”。。。https://localhost
“我的网站”中“网络”选项卡中的请求有效负载显示:
------WebKitFormBoundaryXXXXXXXXXXXXXXXX
Content-Disposition: form-data; name="files[]"; filename="file1"
Content-Type: text/plain
------WebKitFormBoundaryXXXXXXXXXXXXXXXX
Content-Disposition: form-data; name="files[]"; filename="file2"
Content-Type: text/plain
------WebKitFormBoundaryXXXXXXXXXXXXXXXX--
“网络”选项卡还显示,我只向服务器发送了372 B的信息,两个文件的总大小为941 B。无论是前端还是后端,我都没有收到任何错误。我设法解决了这个问题,但老实说,这对我来说毫无意义,firefox和brave浏览器都证实了这一点(虽然可能与浏览器有关,但事实并非如此) 简单地说,我需要删除标题 所以,这个电话看起来像:
async function send_files(url, files) { // files = [File(), File(), ...], url = localhost
const formData = new FormData()
for (const file of files) {
formData.append('files[]', file)
}
var result = await fetch(url, {
method: 'POST',
cors: 'same-origin',
//headers: { REMOVED
// 'Content-Type': 'multipart/form-data'
//},
body: formData
})
return await result.json()
}
我真的不明白为什么,但从我看到的情况来看,设置标题似乎改变了表单数据中阻止数据正确上传的某些内容。尽管我认为没有设置标题,它应该默认为“application/x-www-url-encoded”。我设法解决了这个问题,但老实说,这对我来说毫无意义,firefox和brave浏览器都证实了这一点(虽然可能与浏览器有关,但事实并非如此) 简单地说,我需要删除标题 所以,这个电话看起来像:
async function send_files(url, files) { // files = [File(), File(), ...], url = localhost
const formData = new FormData()
for (const file of files) {
formData.append('files[]', file)
}
var result = await fetch(url, {
method: 'POST',
cors: 'same-origin',
//headers: { REMOVED
// 'Content-Type': 'multipart/form-data'
//},
body: formData
})
return await result.json()
}
我真的不明白为什么,但从我看到的情况来看,设置标题似乎改变了表单数据中阻止数据正确上传的某些内容。尽管我认为没有设置标题,但它应该默认为“application/x-www-url-encoded”。您如何调用
发送文件
功能files
参数的内容来自?在其他异步函数中调用send\u files
,使用wait-send\u-json(…)
,然后调用data.json()
,因为我的所有响应都是json格式的。文件数组中填充了File()
对象。此数组中填充了一个输入类型文件,该文件由javascript捕获并放入一个数组中。使用文件=[…文件,…事件.目标.文件]
。除此之外,我还有一个拖放文件,文件=[…文件,…事件.数据传输.文件]
。出于某种原因,它的行为就好像内容类型是应用程序/x-www-form-urlencoded
-如果以这种方式提交表单,则只会提交文件输入字段的文件名。我甚至使用纯html输入和包含多部分/表单数据的表单提交设置进行了尝试,它会发送相同的负载。您如何调用tsend_files
函数,参数files
的内容从哪里来?在其他async函数中调用send_files
,使用wait send_json(…)
,然后调用data.json()
,因为我的所有响应都是json格式的。文件数组中填充了File()
对象。此数组中填充了一个输入类型文件,该文件由javascript捕获并放入一个数组中。使用文件=[…文件,…事件.目标.文件]
。除此之外,我还有一个拖放文件,文件=[…文件,…事件.数据传输.文件]
。出于某种原因,它的行为就好像内容类型是应用程序/x-www-form-urlencoded
——如果以这种方式提交表单,则只会提交文件输入字段的文件名。我甚至尝试使用纯html输入和带有多部分/表单数据的表单提交设置,并且它发送相同的负载。