Angular 8 - отправить файл как байт [] - PullRequest
0 голосов
/ 17 июня 2020

Мой случай - отправить файл на серверную часть, но единственное содержимое файла в виде массива байтов, например:

public saveFile(file: File, name: string, description: string): Observable<SymbolResponseEditModel> {

    let formData: FormData = new FormData();
    formData.append('FileName', name);
    formData.append('FileDescription', description);
    formData.append('Attachment', file); // <--- this must be a byte array instead of File 

    return this.http.post<SymbolResponseEditModel>(
        'http://senddata.com',
        formData
    );

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

Для этого я пытаюсь преобразовать файл с помощью чтения файлов, но я не могу преобразовать файл в массив байтов в соответствии с to: Получение байтового массива через input type = file

var reader = new FileReader();
  reader.onload = function() {

    var arrayBuffer = this.result,
      array = new Uint8Array(arrayBuffer),
      binaryString = String.fromCharCode.apply(null, array);

    console.log(binaryString);

  }
  reader.readAsArrayBuffer(this.files[0]);

И ошибка

TS2345: Argument of type 'File' is not assignable to parameter of type 'ArrayBuffer | SharedArrayBuffer | ArrayLike<number>'.
      Type 'File' is missing the following properties from type 'SharedArrayBuffer': byteLength, length, [Symbol.species], [Symbol.toStringTag]

Вторая идея - удалить две строки из файла при загрузке потому что тип содержимого ответа - поток октетов:

const reader = new FileReader();

reader.addEventListener('loadend', (e) => {
    const text = e.srcElement.result; // <-- this text is encoded but I don't want it. Anyway the file is different than I
     // sent and i am not able to read it. 
     let splittedString = text.split('\n');
     splittedString = splittedString.splice(2);
     let concatenedArray = splittedString.join('\n');
     this.fetch(concatenedArray, symbolName);
 });

 reader.readAsArrayBuffer(response);

Это должно работать, но программа чтения закодирует файл.

Есть ли у вас какие-либо другие идеи, как отправить файл в виде байтового массива без Дополнительная информация? Возможно ли это?

...