diff --git a/apps/designer/app/shared/db/misc.server.ts b/apps/designer/app/shared/db/misc.server.ts index d460c3c791..5be1b37bbd 100644 --- a/apps/designer/app/shared/db/misc.server.ts +++ b/apps/designer/app/shared/db/misc.server.ts @@ -1,7 +1,7 @@ -import { uploadAsset } from "@webstudio-is/asset-uploader"; +import { uploadAssets as assetUploaderAssetsUploader } from "@webstudio-is/asset-uploader"; import * as db from "./"; -export const uploadAssets = uploadAsset; +export const uploadAssets = assetUploaderAssetsUploader; /** * Conceptually publishing is cloning all data that affects user site diff --git a/packages/asset-uploader/src/index.ts b/packages/asset-uploader/src/index.ts index b1fd10b536..b86efc78a4 100644 --- a/packages/asset-uploader/src/index.ts +++ b/packages/asset-uploader/src/index.ts @@ -11,7 +11,7 @@ import { fsEnvVariables, s3EnvVariables } from "./schema"; const isS3Upload = s3EnvVariables.safeParse(process.env).success; const fsUploadVars = fsEnvVariables.parse(process.env); -export const uploadAsset = async ({ +export const uploadAssets = async ({ request, projectId, db, diff --git a/packages/asset-uploader/src/upload-assets.server.ts b/packages/asset-uploader/src/upload-assets.server.ts new file mode 100644 index 0000000000..b86efc78a4 --- /dev/null +++ b/packages/asset-uploader/src/upload-assets.server.ts @@ -0,0 +1,51 @@ +import path from "path"; +import { + unstable_createFileUploadHandler, + unstable_parseMultipartFormData, +} from "@remix-run/node"; +import { s3UploadHandler } from "./targets/s3/handler"; +import { uploadToS3 } from "./targets/s3/uploader"; +import { uploadToDisk } from "./targets/disk/upload"; +import { fsEnvVariables, s3EnvVariables } from "./schema"; + +const isS3Upload = s3EnvVariables.safeParse(process.env).success; +const fsUploadVars = fsEnvVariables.parse(process.env); + +export const uploadAssets = async ({ + request, + projectId, + db, + dirname, +}: { + request: Request; + projectId: string; + db: unknown; + dirname: string; +}) => { + const uploads = path.join(dirname, "../public"); + const directory = path.join(uploads, fsUploadVars.FILE_UPLOAD_PATH); + const formData = await unstable_parseMultipartFormData( + request, + isS3Upload + ? (file) => s3UploadHandler(file) + : unstable_createFileUploadHandler({ + maxPartSize: 10_000_000, + directory, + file: ({ filename }) => filename, + }) + ); + if (isS3Upload) { + return await uploadToS3({ + projectId, + formData, + db, + }); + } else { + return await uploadToDisk({ + projectId, + formData, + folderInPublic: fsUploadVars.FILE_UPLOAD_PATH, + db, + }); + } +};