payload
Version:
Node, React, Headless CMS and Application Framework built on Next.js
33 lines (32 loc) • 1.27 kB
JavaScript
// @ts-strict-ignore
import { APIError } from '../errors/index.js';
export const getExternalFile = async ({ data, req, uploadConfig })=>{
const { filename, url } = data;
if (typeof url === 'string') {
let fileURL = url;
if (!url.startsWith('http')) {
const baseUrl = req.headers.get('origin') || `${req.protocol}://${req.headers.get('host')}`;
fileURL = `${baseUrl}${url}`;
}
const headers = uploadConfig.externalFileHeaderFilter ? uploadConfig.externalFileHeaderFilter(Object.fromEntries(new Headers(req.headers))) : {
cookie: req.headers?.get('cookie')
};
const res = await fetch(fileURL, {
credentials: 'include',
headers,
method: 'GET'
});
if (!res.ok) {
throw new APIError(`Failed to fetch file from ${fileURL}`, res.status);
}
const data = await res.arrayBuffer();
return {
name: filename,
data: Buffer.from(data),
mimetype: res.headers.get('content-type') || undefined,
size: Number(res.headers.get('content-length')) || 0
};
}
throw new APIError('Invalid file url', 400);
};
//# sourceMappingURL=getExternalFile.js.map