如何在 Azure 中使用节点 JS 函数上传文件



我正在尝试创建一个处理文件上传的 Azure 函数。我尝试了不同的选项(尝试直接从请求中读取或使用强大的(。

对于这两种情况,我在执行函数时都收到以下错误。

Exception while executing function: Functions.UploadFile. mscorlib: TypeError: req.on is not a function  
at IncomingForm.parse (D:homesitewwwrootnode_modulesformidablelibincoming_form.js:117:6)  
at module.exports (D:homesitewwwrootUploadFileindex.js:5:10)  
at D:Program Files (x86)SiteExtensionsFunctions1.0.11702binazurefunctionsfunctions.js:106:24.  

函数代码如下

var formidable = require("formidable");  
module.exports = function (context, request) {  
context.log('JavaScript HTTP trigger function processed a request.');      
var form = new formidable.IncomingForm();  
form.parse(request, function (err, fields, files) {  
context.res = { body : "uploaded"};  
});  
context.done();  
};  

任何帮助,不胜感激。

我让它与以下内容一起工作。请求对象在 Azure 函数(在 AWS lambda 中(既不是 Stream 也不是 EventEmitter。它只是填充了正文和标题。我得到了 https://www.npmjs.com/package/parse-multipart 的帮助。我必须针对 Azure 函数对其进行调整

var multipart = require("parse-multipart");
module.exports = function (context, request) {  
context.log('JavaScript HTTP trigger function processed a request.'); 
// encode body to base64 string
var bodyBuffer = Buffer.from(request.body);
// get boundary for multipart data e.g. ------WebKitFormBoundaryDtbT5UpPj83kllfw
var boundary = multipart.getBoundary(request.headers['content-type']);
// parse the body
var parts = multipart.Parse(bodyBuffer, boundary);
context.res = { body : { name : parts[0].filename, type: parts[0].type, data: parts[0].data.length}}; 
context.done();  
};

这似乎更适合 Azure 函数 2.x 运行时(测试版(。我已经更新了代码。我已经用PDF,JPG,PNG和XLSX对此进行了测试。

只要确保你正在读取二进制数据,如此处所述 —
https://learn.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings#binding-datatype-property

对于动态类型的语言(如 JavaScript(,请使用function.json文件中的dataType属性。例如,要以二进制格式读取 HTTP 请求的内容,请将dataType设置为binary

{
"type": "httpTrigger",
"name": "req",
"direction": "in",
"dataType": "binary"
}

数据类型的其他选项是streamstring

相关内容

  • 没有找到相关文章

最新更新