1
0
Code Issues Pull Requests Packages Projects Releases Wiki Activity GitHub Gitee
Files
inke/apps/web/app/api/upload/route.ts
2023-11-10 14:59:47 +08:00

76 lines
2.1 KiB
TypeScript

import { Account_Plans } from "@/lib/consts";
import { NextResponse } from "next/server";
// import { getServerSession } from "next-auth";
// import { authOptions } from "../auth/[...nextauth]/route";
// import { getUserByEmail } from "@/lib/db/user";
import COS from "cos-nodejs-sdk-v5";
import { Readable } from "stream";
const uploadFile = (stream: Readable, filename: string): Promise<any> => {
return new Promise((resolve, reject) => {
const params = {
Bucket: "gcloud-1303456836",
Region: "ap-chengdu",
Key: "inke/" + filename,
Body: stream,
};
cos.putObject(params, (err: any, data: any) => {
if (err) {
reject(err);
} else {
resolve(data);
}
});
});
};
export const runtime = "nodejs";
var cos = new COS({
SecretId: process.env.TencentSecretID || "",
SecretKey: process.env.TencentSecretKey || "",
});
export async function POST(req: Request) {
// if (!process.env.BLOB_READ_WRITE_TOKEN) {
// return new Response(
// "Missing BLOB_READ_WRITE_TOKEN. Don't forget to add that to your .env file.",
// {
// status: 401,
// },
// );
// }
const file = req.body || "";
const filename = req.headers.get("x-vercel-filename") || "file.txt";
const contentType = req.headers.get("content-type") || "text/plain";
const fileType = `.${contentType.split("/")[1]}`;
// construct final filename based on content-type if not provided
const finalName = filename.includes(fileType)
? filename
: `${filename}${fileType}`;
const fileStream = Readable.from(file as any);
const res = await uploadFile(fileStream, finalName);
// console.log("上传结果", res, res.Location);
if (res && res.statusCode === 200) {
return NextResponse.json({ url: "https://" + res.Location });
}
// if (
// blob &&
// Number(blob.size) > Account_Plans[plan].image_upload_size * 1024 * 1024
// ) {
// return new Response(
// "You have exceeded the maximum size of uploads, please upgrade your plan.",
// {
// status: 429,
// },
// );
// }
}