PHP $ _FILES пусто, выборка данных - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь загрузить файлы, используя API веб-загрузки и PHP.Но по какой-то причине файлы не записываются (или отправляются?) Из веб-браузера на сервер.Я все еще могу отправлять файлы с помощью 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($_FILES), он возвращает пустой массив.Теперь я знаю, что загрузка работает, поскольку curl подтверждает это:

curl -k -X POST -c ... -b ... -H "Content-Type: multipart/form-data" -F "files[]=@file1" -F "files[]=@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. Я не получаю никаких ошибок ни на переднем конце, ни на заднем конце.

1 Ответ

0 голосов
/ 16 июля 2019

Мне удалось решить проблему, но, честно говоря, это не имеет смысла для меня, подтверждено как Firefox, так и смелым браузером (думал, что это может быть связано с браузером, это не так).

Просто мне нужно было удалить заголовки ...

Итак, звонок выглядит так:

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».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...