Files
ReinLoopTest/ControlPanel/model-handlers.js
2026-07-31 11:26:38 +08:00

44 lines
1.5 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: "issueModelUpload",
deviceId: request.deviceId,
fileName,
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 };