我将一个文件上传到OpenKM中,并将URI作为响应获取到文件。我想将链接保存为processVariable。
const { Client, logger } = require("camunda-external-task-client-js");
const { Variables } = require("camunda-external-task-client-js");
const { exec } = require('child_process');
const http = require('http');
const fs = require('fs');
const config = { baseUrl: "http://localhost:8080/engine-rest" };
const client = new Client(config);
var moment = require("moment");
client.subscribe("Rechnung", async function({ task, taskService }) {
console.log("*** Processing task " + task.id);
var uploadedFile = task.variables.get("rechnung");
const file = fs.createWriteStream(uploadedFile.filename);
const request = http.get("http://localhost:8080/engine-rest" + uploadedFile.remotePath, function(response) {
response.pipe(file);
file.on("finish", () => {
file.close();
});
});
var cmd = "curl -u okmAdmin:admin -H \"Accept: application/json\" -X POST -F docPath=\"/okm:root/manuel/" + task.id + "_" + uploadedFile.filename + "\" -F content=\"@" + uploadedFile.filename + "\" http://172.20.16.90:8080/OpenKM/services/rest/document/createSimple";
var newlink = "";
exec(cmd, (err, stdout, stderr) => {
newlink = "http://172.20.16.90:8080/OpenKM/frontend/index.jsp?uuid=" + JSON.parse(stdout).uuid;
if(err)
console.log("error " + JSON.stringify(stderr));
});
var processVariables = new Variables();
processVariables.set("link", newlink );
await taskService.complete(task, processVariables);
});变量被创建,但是链接是空的。我试过encodeURIComponent,但没有成功。你能告诉我该怎么做吗?
谢谢!
发布于 2022-06-24 20:03:04
问题是异步函数不等待exec完成。我就这样解决了
const { Client, logger } = require("camunda-external-task-client-js");
const { Variables } = require("camunda-external-task-client-js");
const { exec } = require('child_process');
const http = require('http');
const fs = require('fs');
const config = { baseUrl: "http://localhost:8080/engine-rest" };
const client = new Client(config);
// rechnungseingang
client.subscribe("Rechnung", async function({ task, taskService }) {
console.log("*** Processing task " + task.id + " - " + task.processInstanceId);
console.log(JSON.stringify(task));
// get the uploaded file
var uploadedFile = task.variables.get("rechnung");
// save it to disk
const file = fs.createWriteStream(uploadedFile.filename);
const request = http.get("http://localhost:8080/engine-rest" + uploadedFile.remotePath, function(response) { response.pipe(file); file.on("finish", () => { file.close(); }); });
var createFolder = "curl -u okmAdmin:admin -H \"Accept: application/json\" -H \"Content-Type: application/json\" -X POST -d \"/okm:root/ibass/" + task.processInstanceId + "\" http://192.168.0.31:8080/OpenKM/services/rest/folder/createSimple";
await sh(createFolder);
// upload to openkm
var cmd = "curl -u okmAdmin:admin -H \"Accept: application/json\" -X POST -F docPath=\"/okm:root/ibass/" + task.processInstanceId + "/" + uploadedFile.filename + "\" -F content=\"@" + uploadedFile.filename + "\" http://192.168.0.31:8080/OpenKM/services/rest/document/createSimple";
let newlink = await sh(cmd);
var processVariables = new Variables();
processVariables.set("link", "http://192.168.0.31:8080/OpenKM/frontend/Download?uuid=" + newlink);
await taskService.complete(task, processVariables);
});
function sh(cmd) {
return new Promise(resolve => {
exec(cmd, (err, stdout, stderr) => {
let link;
link = JSON.parse(stdout).uuid;
if(err)
console.log("error " + JSON.stringify(stderr));
resolve(link);
});
})
}https://stackoverflow.com/questions/72735758
复制相似问题