Создание объекта «Файл» из URL-адреса в TypeScript
В TypeScript при работе с URL-адресами вы можете столкнуться с ситуацией, когда вам нужно создать объект File на основе заданного URL-адреса. Это может быть полезно при обработке загрузки файлов или выполнении операций, связанных с файлами, в вашем веб-приложении. В этой статье мы рассмотрим несколько методов достижения этой цели в TypeScript, а также примеры кода.
Метод 1: использование API Fetch и Blob
API Fetch позволяет отправлять HTTP-запросы и получать ответы. Объединив Fetch API с объектом Blob, мы можем создать объект File из URL-адреса.
async function createFileObjectFromURL(url: string): Promise<File> {
const response = await fetch(url);
const blob = await response.blob();
return new File([blob], 'filename');
}
// Usage
const url = 'https://example.com/file.pdf';
createFileObjectFromURL(url).then((file) => {
// Do something with the file object
});
Метод 2: использование XMLHttpRequest и конструктора файлов
Объект XMLHttpRequest можно использовать для выполнения асинхронных HTTP-запросов. Получая двоичные данные с помощью XMLHttpRequest и создавая объект File, мы можем создать объект File из URL-адреса.
function createFileObjectFromURL(url: string, filename: string): Promise<File> {
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.responseType = 'blob';
xhr.onload = () => {
if (xhr.status === 200) {
const blob = xhr.response;
const file = new File([blob], filename);
resolve(file);
} else {
reject(new Error('Failed to retrieve file from URL'));
}
};
xhr.onerror = () => {
reject(new Error('Failed to retrieve file from URL'));
};
xhr.send();
});
}
// Usage
const url = 'https://example.com/file.pdf';
const filename = 'filename.pdf';
createFileObjectFromURL(url, filename).then((file) => {
// Do something with the file object
});
Метод 3: использование axios и Blob
Если вы используете библиотеку axios для выполнения HTTP-запросов, вы можете использовать ее встроенную поддержку для обработки двоичных данных вместе с объектом Blob для создания объекта File из URL-адреса..
import axios from 'axios';
async function createFileObjectFromURL(url: string, filename: string): Promise<File> {
const response = await axios.get(url, {
responseType: 'blob',
});
const blob = response.data;
return new File([blob], filename);
}
// Usage
const url = 'https://example.com/file.pdf';
const filename = 'filename.pdf';
createFileObjectFromURL(url, filename).then((file) => {
// Do something with the file object
});