44 lines
1.6 KiB
JavaScript
44 lines
1.6 KiB
JavaScript
const fs = require("node:fs");
|
|
const path = require("node:path");
|
|
|
|
function createModelHandlers({ callServer, fetchImpl = fetch }) {
|
|
return {
|
|
list(request) {
|
|
return callServer({
|
|
type: "listModels",
|
|
folder: `${request.deviceId}/model_config`
|
|
}, request.credentials);
|
|
},
|
|
|
|
async upload(request) {
|
|
if (!request.sourcePath || !request.fileName) throw new Error("请先选择模型文件");
|
|
const sourcePath = path.resolve(request.sourcePath);
|
|
const fileName = path.basename(request.fileName);
|
|
const modelName = path.basename(request.modelName || fileName);
|
|
await fs.promises.access(sourcePath, fs.constants.R_OK);
|
|
const issued = await callServer({
|
|
type: "uploadDataFile",
|
|
fileName,
|
|
folder: `${request.deviceId}/model_config`,
|
|
modelName,
|
|
overwrite: request.overwrite === true
|
|
}, request.credentials);
|
|
const form = new FormData();
|
|
form.append("file", new Blob([await fs.promises.readFile(sourcePath)]), fileName);
|
|
const response = await fetchImpl(issued.uploadMetadata.url, { method: "POST", body: form });
|
|
if (![200, 204].includes(response.status)) throw new Error(`模型上传失败: HTTP ${response.status}`);
|
|
return {
|
|
success: true,
|
|
fileID: issued.fileID,
|
|
fileName: issued.fileName,
|
|
originalFileName: issued.originalFileName
|
|
};
|
|
},
|
|
|
|
delete(request) {
|
|
return callServer({ type: "deleteModel", fileID: request.fileID }, request.credentials);
|
|
}
|
|
};
|
|
}
|
|
|
|
module.exports = { createModelHandlers }; |