как отправить запрос, используя multipart / form-data? - PullRequest
1 голос
/ 25 февраля 2020

У меня есть приложение в ReactJs, использующее Ax ios и Papaparse.

У меня есть страница, где пользователь перетаскивает файл CSV в коробку, я автоматически загружаю CSV, обновляю и делаю некоторые изменения в данных и отправка нового CSV-файла на сервер.

Я делал все, пока не прибыл в ту часть, где мне нужно создать новый CSV, и загрузил его на сервер.

Вот мой код в настоящее время:

            const data = papaparse.unparse(destinationUpdateData, {
                header: true,
                skipEmptyLines: true
            });
            // data is a string in csv format

            const file = new File([data as BlobPart], "destination.csv",  { type: "text/csv" });
            // I get a File type.

            const paramsDestination = {
                project_id: this.props.projectId,
                datastore_id: 'DESTINATIONS',
                file: file,
                id: ["1", "2","3"]
            }
            // the data I would like to send is build

            Axios.post(`new_item_file_attachment`, params, {headers: {"Content-Type": "multipart/form-data"}})
            //I send to the server

Дело в том, что мой сервер ожидает запрос с типом содержимого multipart/form-data, но я не понимаю, как вручную настроить мой параметр для соответствия этот тип.

В настоящее время вызов API не работает, поскольку данные передаются как json, и сервер отклоняет их.

Возможно ли этого добиться?

Я пытался использовать FormData, но не вижу, как отправить логическое значение и массив

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Вот мое решение.

const data = new FormData();
data.append("project_id", id);
data.append("file", file);

axios.post(url, data);

Попробуйте и прокомментируйте при возникновении некоторых ошибок.

1 голос
/ 25 февраля 2020

Не на 100% знаком с Ax ios, но должно быть что-то вроде этого:

var params = new FormData();

params.append("project_id", this.props.projectId);
params.append("datastore_id", 'DESTINATIONS');
params.append("file", file);
params.append("id", JSON.stringify(["1", "2","3"])); // Arrays must be stringified
Axios.post(`new_item_file_attachment`, params)

Вам определенно нужно поместить все в объект FormData. В прошлый раз, когда я делал это, мне также пришлось удалить «Content-Type»: «multipart / form-data» из заголовка. Я считаю, что правильный заголовок должен быть заполнен автоматически. Попробуйте это с указанием заголовка и без него, и дайте мне знать, если любой из них работает.

...