я пытаюсь загрузить файл, используя API выборки и formData - угловой материал - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь загрузить изображение и отправить formData на сервер.

Я использую formData.append, чтобы добавить загруженный файл и fetchAPI для отправки formData.

Мой ввод выглядиткак показано ниже

<input style="display:none" type="file"
                               (change)="fileChange($event)"
                               #fileInput>
fileChange(event) {
    let fileList: FileList = event.target.files;
    if (fileList.length > 0) {
      let file: File = fileList[0];
      let formData: FormData = new FormData();
    formData.append('uploadFile', file, file.name);
    console.log('formData', formData);
    this.handleUpload(formData);
    }
  }
handleUpload(formData) {
    const url = `/upload?`;
    let result;
    const req = new Request(proxyurl + url,
      {
        method: 'POST',
        headers: {
          'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW'
    },
        body: formData
      });
    fetch(req)
      .then(response => response.text())
      .then(() => {
        if (result.data) {
          console.log('response ', result.data);
        } else {
          console.log('request failed');
        }
      })
      .catch(() => console.log('Can\'t access ' + url + ' response. Blocked by browser?'));
  }

Когда я нажимаю на услугу, я получаю код состояния: 422 Необработанный объект с ответом ниже

{"error":{"message":"?exception.illegalargument?"}}

ЗапросПолезная нагрузка указана ниже

------WebKitFormBoundary8E02ll3T0mo433bu
Content-Disposition: form-data; name="uploadFile"; filename="Screen Shot 2019-10-04 at 10.49.34 AM.png"
Content-Type: image/png


------WebKitFormBoundary8E02ll3T0mo433bu--

Пожалуйста, помогите мне, как заставить это работать.

Ответы [ 2 ]

0 голосов
/ 15 ноября 2019

Это работало, когда я не добавлял никаких заголовков.

 handleUpload(formData) {
     const url = `/upload`;
     const proxyurl = 'https://cors-anywhere-proxy.herokuapp.com/';
     let result;
     const req = new Request(proxyurl + url,
       {
         method: 'POST',
         headers: {},
         body: formData
       });
     fetch(req)
       .then(response => response.text())
       .then(() => {
         if (result.data) {
           console.log('result.data', result.data);
         } else {
           console.log('request failed');
         }
       })
       .catch(() => console.log('Can\'t access ' + url + ' response. Blocked by browser?'));
   }
0 голосов
/ 08 ноября 2019

Я заработал, выполнив следующее:

удалил заголовки и проверил, ожидает ли сервер uploadFile.

рабочий код ниже:

  fileChange(event) {
    let fileList: FileList = event.target.files;
    if (fileList.length > 0) {
      let file: File = fileList[0];
      let formData: FormData = new FormData();
      formData.append('uploadedFile', file, file.name);
      this.handleUpload(formData);
    }
  }

  handleUpload(formData) {
    const url = `/upload?`;
    let result;
    const req = new Request(url,
      {
        method: 'POST',
        headers: {},
        body: formData
      });
    fetch(req)
      .then(response => response.text())
      .then(() => {
        if (result.data) {
          console.log('response data ', result.data);
        } else {
          console.log('request failed');
        }
      })
      .catch(() => console.log('Can\'t access ' + url + ' response. Blocked by browser?'));
  }
...