Загрузить файл Excel из React в бэкэнд C # ASP.NET Core - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь загрузить файл из реагирующего внешнего интерфейса в бэкэнд C #. Я использую Drop Zone, чтобы получить файл, и затем я вызываю API-помощник, чтобы опубликовать файл, но я получаю разные ошибки, когда я пытаюсь разные вещи. Я не уверен точно, какими должны быть заголовки и что я должен отправить, но я получаю две отчетливые ошибки. Если я не установил тип содержимого, я получаю ошибку 415 (Unsupported Media Type). Если я укажу тип контента как multipart / form-data, я получу 500 внутреннюю ошибку сервера. Я получаю ту же ошибку, когда типом контента является application / json. URL находится в прошлом, и я уверен, что это правильно. Я не уверен, должен ли файл добавляться как file [0] [0], как я это сделал, или как file [0], поскольку это массив, но я считаю, что он должен быть первым. Любые предложения приветствуются :) Вот мой код помощника поста API:

export const uploadAdminFile = (file, path, method = 'POST', resource = 
config.defaultResource) => {
const url = createUrl(resource, path);

const data = new FormData();


data.append('file', file[0][0]);
data.append('filename', file[0][0].name);

const request = accessToken =>
fetch(
  url,
  {
    method,
    mode: 'cors',
    withCredentials: true,
    processData: false,
    headers: {
      Accept: 'application/json',
      'Content-Type': 'application/json', //'multipart/form-data',
      Authorization: `Bearer ${accessToken}`,
    },
    body: data,
  })
  .then(res => res.json())
  .then(success => console.log('API HELPER: file upload success: ', success)
    .catch(err => console.log('API HELPER: error during file upload: ', err)));


return sendRequest(request, resource);

};

1 Ответ

0 голосов
/ 05 сентября 2018

Спасибо за помощь и предложения, это оказалось проблемой бэкэнда, но даже я многому научился в процессе. Я опубликую свой рабочий код здесь на случай, если кто-нибудь столкнется с этим и сочтет его полезным.

export const uploadAdminFile = (file, path, resource=config.defaultResource) => {
  const url = createUrl(resource, path);
  const formData = new FormData();

  formData.append('file', file[0][0]);
  formData.append('filename', file[0][0].name);

  const request = accessToken =>
    fetch(url,
    {
      method: 'POST',
      headers: {
        Accept: 'application/json',
        Authorization: `Bearer ${accessToken}`,
    },
    body: formData,
  });

  return sendRequest(request, resource);
};

Как уже упоминалось, имя файла не нужно отправлять отдельно, а количество не указывается. Я индексирую файл таким образом, потому что я получаю его из dropzone в виде массива, и мне нужен только один файл (первый в массиве). Я надеюсь, что это поможет кому-то еще, и вот ссылка на mdn fetch docs (хорошая информация) и хорошая статья об использовании fetch и formData .

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