Мой случай - отправить файл на серверную часть, но единственное содержимое файла в виде массива байтов, например:
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);
Это должно работать, но программа чтения закодирует файл.
Есть ли у вас какие-либо другие идеи, как отправить файл в виде байтового массива без Дополнительная информация? Возможно ли это?