gpt4 book ai didi

node.js - 如何在Azure中使用Node JS功能上传文件

转载 作者:搜寻专家 更新时间:2023-10-31 22:49:08 25 4
gpt4 key购买 nike

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

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

Exception while executing function: Functions.UploadFile. mscorlib: TypeError: req.on is not a function  
at IncomingForm.parse (D:\home\site\wwwroot\node_modules\formidable\lib\incoming_form.js:117:6)
at module.exports (D:\home\site\wwwroot\UploadFile\index.js:5:10)
at D:\Program Files (x86)\SiteExtensions\Functions\1.0.11702\bin\azurefunctions\functions.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 Function 2.x 运行时(测试版)配合得更好。我已经更新了代码。我已经用 PDF、JPG、PNG 和 XLSX 对此进行了测试。

关于node.js - 如何在Azure中使用Node JS功能上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50526133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com