PHP$\u文件为空,获取formdata

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

我正在尝试使用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) {
        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中,如果I
print\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输入和包含多部分/表单数据的表单提交设置进行了尝试,它会发送相同的负载。您如何调用t
send_files
函数,参数
files
的内容从哪里来?在其他
async函数中调用
send_files
,使用
wait send_json(…)
,然后调用
data.json()
,因为我的所有响应都是json格式的。文件数组中填充了
File()
对象。此数组中填充了一个输入类型文件,该文件由javascript捕获并放入一个数组中。使用
文件=[…文件,…事件.目标.文件]
。除此之外,我还有一个拖放文件,
文件=[…文件,…事件.数据传输.文件]
。出于某种原因,它的行为就好像内容类型是
应用程序/x-www-form-urlencoded
——如果以这种方式提交表单,则只会提交文件输入字段的文件名。我甚至尝试使用纯html输入和带有多部分/表单数据的表单提交设置,并且它发送相同的负载。