Vercel/src/photo/storage.ts
2025-02-16 10:19:16 -06:00

40 lines
1.1 KiB
TypeScript

import {
copyFile,
deleteFile,
generateRandomFileNameForPhoto,
getExtensionFromStorageUrl,
moveFile,
putFile,
} from '@/platforms/storage';
import { removeGpsData } from './server';
export const convertUploadToPhoto = async ({
urlOrigin,
fileBytes,
shouldStripGpsData,
shouldDeleteOrigin = true,
} : {
urlOrigin: string
fileBytes?: ArrayBuffer
shouldStripGpsData?: boolean
shouldDeleteOrigin?: boolean
}) => {
const fileName = generateRandomFileNameForPhoto();
const fileExtension = getExtensionFromStorageUrl(urlOrigin);
const photoPath = `${fileName}.${fileExtension || 'jpg'}`;
if (shouldStripGpsData) {
const fileWithoutGps = await removeGpsData(
fileBytes ?? await fetch(urlOrigin, { cache: 'no-store' })
.then(res => res.arrayBuffer()),
);
return putFile(fileWithoutGps, photoPath).then(async url => {
if (url && shouldDeleteOrigin) { await deleteFile(urlOrigin); }
return url;
});
} else {
return shouldDeleteOrigin
? moveFile(urlOrigin, photoPath)
: copyFile(urlOrigin, photoPath);
}
};