Files
hounam-submit-form-backend/src/modules/file/service/file.service.ts
2026-06-02 17:07:20 +03:30

59 lines
1.2 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// src/services/file.service.ts
import axios from "axios";
import FormData from "form-data";
import { File } from "../../../models/File";
require("dotenv").config();
interface UploadResult {
id: string;
url: string;
size: number;
mimeType: string;
}
export const uploadFileToCDN = async (
fileBuffer: Buffer,
originalName: string,
mimeType: string,
): Promise<UploadResult> => {
const formData = new FormData();
formData.append("file", fileBuffer, {
filename: originalName,
contentType: mimeType,
});
console.log(`Bearer ${process.env.CDN_SERVICE_TOKEN}`);
// 1⃣ ارسال به CDN
const response = await axios.post(`http://localhost:3500/upload`, formData, {
headers: {
...formData.getHeaders(),
Authorization: `Bearer ${process.env.CDN_SERVICE_TOKEN}`,
},
maxContentLength: Infinity,
maxBodyLength: Infinity,
});
console.log(response);
const { url, size, mime } = response.data;
// 2⃣ ذخیره در دیتابیس
const createdFile = await File.create({
fileName: url.split("/").pop()!,
originalName,
mimeType: mime,
path: url,
size,
});
console.log(url);
return {
id: createdFile.id,
url,
size,
mimeType: mime,
};
};