parent
498b0b0a28
commit
6a58342b38
@ -0,0 +1,59 @@
|
||||
import axios from 'axios';
|
||||
import { formidable } from 'formidable';
|
||||
import type { NextApiRequest, NextApiResponse } from 'next';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
|
||||
import { env } from '~/env/server.mjs';
|
||||
|
||||
const BASE_URL = `${env.SUPABASE_URL}/storage/v1/object`;
|
||||
|
||||
export const config = {
|
||||
api: {
|
||||
bodyParser: false,
|
||||
},
|
||||
};
|
||||
|
||||
export default async function handler(
|
||||
req: NextApiRequest,
|
||||
res: NextApiResponse,
|
||||
) {
|
||||
const headers = {
|
||||
'Content-Type': 'multipart/form-data',
|
||||
apiKey: env.SUPABASE_ANON_KEY,
|
||||
authorization: 'Bearer ' + env.SUPABASE_ANON_KEY,
|
||||
};
|
||||
|
||||
if (req.method === 'POST') {
|
||||
try {
|
||||
const form = formidable({ multiples: false });
|
||||
form.parse(req, async (err, fields, files) => {
|
||||
if (err) {
|
||||
throw err;
|
||||
}
|
||||
const { file } = files;
|
||||
const actualFile = file instanceof Array ? file[0] : file;
|
||||
const filePath = `${uuidv4()}-${actualFile.originalFilename}`;
|
||||
const { key } = fields;
|
||||
|
||||
const data = await axios.post(
|
||||
`${BASE_URL}/${key}/${filePath}`,
|
||||
actualFile,
|
||||
{
|
||||
headers,
|
||||
},
|
||||
);
|
||||
return res.status(200).json({
|
||||
url: data.data.key,
|
||||
});
|
||||
});
|
||||
} catch (error: unknown) {
|
||||
return Promise.reject(error);
|
||||
}
|
||||
}
|
||||
|
||||
if (req.method === 'GET') {
|
||||
const { key, filePath } = req.query;
|
||||
const data = await axios.get(`${BASE_URL}/public/${key}/${filePath}`);
|
||||
res.status(200).json(data);
|
||||
}
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
import { createClient } from '@supabase/supabase-js';
|
||||
|
||||
import { env } from '~/env/client.mjs';
|
||||
|
||||
const supabaseUrl = env.NEXT_PUBLIC_SUPABASE_URL;
|
||||
const supabaseAnonKey = env.NEXT_PUBLIC_SUPABASE_ANON_KEY;
|
||||
|
||||
export const supabase = createClient(supabaseUrl, supabaseAnonKey);
|
Loading…
Reference in new issue