feat: support other type file upload

This commit is contained in:
Hk-Gosuto
2024-03-31 23:07:17 +08:00
parent aea5bedb68
commit 80a077a3db
9 changed files with 223 additions and 33 deletions

View File

@@ -2,6 +2,7 @@ import { getServerSideConfig } from "@/app/config/server";
import LocalFileStorage from "@/app/utils/local_file_storage";
import S3FileStorage from "@/app/utils/s3_file_storage";
import { NextRequest, NextResponse } from "next/server";
import mime from "mime";
async function handle(
req: NextRequest,
@@ -13,19 +14,27 @@ async function handle(
try {
const serverConfig = getServerSideConfig();
const fileName = params.path[0];
const contentType = mime.getType(fileName);
if (serverConfig.isStoreFileToLocal) {
var fileBuffer = await LocalFileStorage.get(params.path[0]);
var fileBuffer = await LocalFileStorage.get(fileName);
return new Response(fileBuffer, {
headers: {
"Content-Type": "image/png",
"Content-Type": contentType ?? "application/octet-stream",
},
});
} else {
var file = await S3FileStorage.get(params.path[0]);
return new Response(file?.transformToWebStream(), {
headers: {
"Content-Type": "image/png",
},
var file = await S3FileStorage.get(fileName);
if (file) {
return new Response(file?.transformToWebStream(), {
headers: {
"Content-Type": contentType ?? "application/octet-stream",
},
});
}
return new Response("not found", {
status: 404,
});
}
} catch (e) {

View File

@@ -4,6 +4,7 @@ import { auth } from "@/app/api/auth";
import LocalFileStorage from "@/app/utils/local_file_storage";
import { getServerSideConfig } from "@/app/config/server";
import S3FileStorage from "@/app/utils/s3_file_storage";
import path from "path";
async function handle(req: NextRequest) {
if (req.method === "OPTIONS") {
@@ -19,20 +20,21 @@ async function handle(req: NextRequest) {
try {
const formData = await req.formData();
const image = formData.get("file") as File;
const file = formData.get("file") as File;
const originalFileName = file?.name;
const imageReader = image.stream().getReader();
const imageData: number[] = [];
const fileReader = file.stream().getReader();
const fileData: number[] = [];
while (true) {
const { done, value } = await imageReader.read();
const { done, value } = await fileReader.read();
if (done) break;
imageData.push(...value);
fileData.push(...value);
}
const buffer = Buffer.from(imageData);
var fileName = `${Date.now()}.png`;
const buffer = Buffer.from(fileData);
const fileType = path.extname(originalFileName).slice(1);
var fileName = `${Date.now()}.${fileType}`;
var filePath = "";
const serverConfig = getServerSideConfig();
if (serverConfig.isStoreFileToLocal) {