У меня есть объект FormData, в который я хотел бы добавить файл в моем случае .png и .pdf файлы.
Пока я сделал это:
async setData(file) {
const formData = new FormData();
formData.append('type', file.type);
formData.append('file', await this.fileToBlob(file.location)); // filereader image object which can be sent to the server
formData.append('name', file.new_name);
formData.append('url', file.location);
return formData;
},
Я могу заполнить все поля правильно, за исключением файла, который должен содержать сам файл. Я не могу указать правильный тип BLOB-объекта в поле файла.
Для этого я попробовал этот метод:
async fileToBlob(location) {
const base64 = await this.imgTob64(location); // returns the path of the image / the link in this case since it is saved in the cloud
return fetch(base64)
.then(res => res.blob())
.then(blob => console.log(blob))
.catch(error => console.log(error))
};
Во-первых, он не работает, а во-вторых, он принимает только строку base64, которая подходит для изображений, но не для файлов PDF.
На сайте laravel я получаю файлы из цифрового океана с s3, как api:
public function getFileLocation()
{
return Storage::disk('do_spaces')->url('files/'.$this->fileName);
}
Моя текущая мысль заключается в том, чтобы в основном преобразовать файл из URL-адреса в блоб, вернуть его клиенту и добавить в FormData, но как мне создать правильный BLOB-объект из URL-адреса файла в javascript?