coze-plugin-utils
Version:
Comprehensive utility library for Coze plugins with multimedia processing, browser automation, cloud storage integration, and AI-powered video/audio generation capabilities
82 lines • 3.4 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.uploadFile = uploadFile;
exports.uploadFromTempFile = uploadFromTempFile;
exports.uploadFromURL = uploadFromURL;
const ali_oss_1 = __importDefault(require("ali-oss"));
const node_path_1 = __importDefault(require("node:path"));
const mime_1 = __importDefault(require("mime"));
const promises_1 = __importDefault(require("node:fs/promises"));
const media_1 = require("../media");
const core_1 = require("../core");
async function uploadFile(buffer, filename, dir = 'resource') {
dir = `${dir}/${Math.random().toString(36).slice(2, 12)}`;
filename = decodeURI(filename);
buffer = typeof buffer === 'string' ? Buffer.from(buffer) : buffer;
const ossConfig = (0, core_1.getGlobalConfig)('aliyun')?.oss;
if (!ossConfig) {
return { HttpCode: 500, Message: '未配置阿里云OSS' };
}
const client = new ali_oss_1.default({
region: ossConfig.region, // 示例:'oss-cn-hangzhou',填写Bucket所在地域。
accessKeyId: ossConfig.accessKeyId, // 确保已设置环境变量OSS_ACCESS_KEY_ID。
accessKeySecret: ossConfig.accessKeySecret, // 确保已设置环境变量OSS_ACCESS_KEY_SECRET。
bucket: ossConfig.bucket, // 示例:'my-bucket-name',填写存储空间名称。
});
const cdnUrl = ossConfig.cdnUrl;
try {
const data = { HttpCode: 201, Message: '上传成功' };
const filepath = node_path_1.default.join(dir, filename);
const res = await client.put(filepath, buffer);
if (res.res.status >= 200 && res.res.status < 300) {
data.url = `${cdnUrl}/${filepath}`;
}
return data;
}
catch (ex) {
return { HttpCode: 500, Message: ex, url: filename };
}
}
async function uploadFromTempFile(tmpFile, autoClear = true) {
const buffer = await promises_1.default.readFile(tmpFile);
try {
const res = await uploadFile(buffer, node_path_1.default.basename(tmpFile));
return res;
}
finally {
if (autoClear) {
const tmpDir = (0, core_1.getTempPath)(tmpFile);
console.log('removing tmp dir...', tmpDir);
await promises_1.default.rm(tmpDir, { recursive: true, force: true });
}
}
}
// 通过 URL 上传文件
async function uploadFromURL(file) {
const res = await fetch(file);
const contentType = res.headers.get('Content-Type');
let ext = '';
if (contentType) {
ext = `.${mime_1.default.getExtension(contentType)}` || '';
}
const arrayBuffer = await res.arrayBuffer();
const match = file.match(/([^./]*?\.[^./]*)~tplv/);
const buffer = Buffer.from(arrayBuffer);
let filename = match?.[1];
if (ext && filename && !filename.endsWith(ext)) {
filename += `${ext}`;
}
if (!filename) {
if (!ext || ext === '.bin') {
const mimeType = (0, media_1.detectMimeType)(buffer) || '';
const extension = (mimeType.split('/'))[1];
ext = extension ? `.${extension}` : '';
}
filename = `${Math.random().toString(36).slice(2, 10)}${ext}`;
}
return await uploadFile(buffer, filename);
}
//# sourceMappingURL=aliyun.oss.js.map