我究竟做错了什么?为什么函数超时?
我有一个 blob 触发的功能,它工作得很好:
const Jimp = require("jimp");
module.exports = function(context, myBlob) {
const correlation = context.bindings.inputBlob.correlation;
const inputImage = context.bindings.inputBlob.image;
const imageName = context.bindings.inputBlob.imageName;
context.log(
correlation + "Attempting to convert this image to a tiff: " + imageName
);
Jimp.read(Buffer.from(inputImage, "base64"), function(err, image) {
image.getBuffer(Jimp.MIME_TIFF, function(error, tiff) {
const response = {
myimage: tiff.toString("base64"),
correlation: correlation
};
context.bindings.outputBlob = response
context.log(
correlation + "Successfully converted " + imageName + " to tiff."
);
context.done();
});
});
};
这是function.json文件:
{
"bindings": [
{
"name": "myBlob",
"type": "blobTrigger",
"direction": "in",
"path": "images-in/{destination}/{name}",
"connection": "AZURE_STORAGE_CONNECTION_STRING"
},
{
"name": "inputBlob",
"type": "blob",
"direction": "in",
"path": "images-in/{destination}/{name}",
"connection": "AZURE_STORAGE_CONNECTION_STRING"
},
{
"type": "blob",
"name": "outputBlob",
"path": "{destination}/{name}.tiff",
"connection": "AZURE_STORAGE_CONNECTION_STRING",
"direction": "out"
}
],
"disabled": false
}
它的工作方式:
- 将 blob 拖放到特定位置
- 输出 blob 将由函数在另一个位置生成(整个过程不超过 5 秒)。
我决定我需要这个函数是 http 触发的,所以我做了以下更改:
const Jimp = require("jimp");
module.exports = function(context, req) {
Jimp.read(Buffer.from(req.body, "base64"), function(err, image) {
image.getBuffer(Jimp.MIME_TIFF, function(error, tiff) {
const response = {
myimage: tiff.toString("base64"),
correlation: "yeeeeees"
};
});
context.res = {
body: response
};
context.done();
});
};
函数.json:
{
"bindings": [
{
"authLevel": "anonymous",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "res"
}
]
}
但是,我得到了500:
遥测显示如下:
我究竟做错了什么?为什么函数超时?
我对该函数进行了以下更新:
const Jimp = require("jimp");
module.exports = function (context, req) {
const text = Buffer.from(req.body, "base64").toString("utf-8");
Jimp.read(text, function(err, image) {
if (err) {
context.res = {
body: err
};
context.done();
}
image.getBuffer(Jimp.MIME_TIFF, function(error, tiff) {
if (error) {
context.res = {
body: error
};
context.done();
}
const response = {
myimage: tiff.toString("base64"),
correlation: "yeeeeees"
};
context.res = {
body: response
};
context.done();
});
});
};
这产生了以下荒谬的回应:
{
"errno": -4058,
"code": "ENOENT",
"syscall": "open",
"path": "D:\\home\\site\\wwwroot\\$R\u0005������{\u001av��r��Ū�O�$z�ނ)",
"methodName": "constructor"
}