gpt4 book ai didi

javascript - 如何读取 Azure 函数 HTTP 请求的参数并使用 blob 存储中的文件进行响应?

转载 作者:行者123 更新时间:2023-11-30 19:19:28 25 4
gpt4 key购买 nike

我正在构建一个 Azure Function 应用程序,在尝试代理请求(用于数据捕获目的)并仍然响应请求的文件时遇到了一些问题。基本上我想要完成的是:

  1. 客户端通过 Azure Function 端点(而非其 blob 存储位置)上的 GET 参数请求文件
  2. 函数将一些元数据记录到表存储(例如 IP 地址、时间戳、文件名等)
  3. 函数在 blob 存储中找到所需的文件并将其转发给客户端,就好像第 2 步没有发生一样

我尝试了一种使用 Q 的方法(概述 here )但没有成功,而且我无法缩小问题范围(超出标准 500 错误)。

上面的教程基本上是这样的:

const rawFile = await q.nfcall(fs.readFile, blobUrl);

const fileBuffer = Buffer.from(rawFile, ‘base64’);

context.res = {
status: 202,
body: fileBuffer,
headers: {
"Content-Disposition": "attachment; examplefile.mp3;"
}
};

context.done();

我遇到了一些困难,我正在努力寻找一个我认为是常见问题的解决方案(即简单地将下载元数据记录到表中)。我是 Azure 的新手,到目前为止我发现事情有点乏味......有没有一种简单的方法可以做到这一点?

编辑:根据我从 context.bindings.myFile.length 得到的响应,我认为我已经能够检索到来自 blob 存储的文件,但我还无法在响应中将其发回。我尝试了以下方法:

context.res = {
status: 202,
body: context.bindings.myFile,
headers: {
'Content-Type': 'audio/mpeg',
'Content-Disposition': 'attachment;filename=' + fileName,
'Content-Length': context.bindings.myFile.length
}
};

编辑 2: 我认为这已经基本解决了 - 我忽略了下面答案的 HTTP 输入部分中的 methodsroute .看起来我能够根据 GET 请求动态检索 blob 并将它们用作输入,而且我也能够将它们发送回客户端。我的 HTTP 响应现在看起来像这样:

context.res = {
status: 200,
headers: {
'Content-Length': context.bindings.myFile.length,
'Content-Type': 'audio/mpeg'
},
body: context.bindings.myFile,
isRaw: true
};

最佳答案

让我解释一下你的问题:

  • 您只想根据 http 请求检索 blob 存储对象。

我认为值得研究bindings .它们简化了与其他 Azure 服务(存储帐户、服务总线、Twilio 和函数应用程序)的集成。

在您的情况下,它应该是 input binding for blob storage .作为实现它的一种方法,您需要 customize您在 function.json 的 http 触发器部分中的路由如下:file/{fileName}。然后在同一 function.json 中的输入绑定(bind)定义中使用 fileName

我认为 function.json 应该是这样的:

{
"bindings": [
{
"type": "httpTrigger",
"name": "req",
"direction": "in",
"methods": [ "get" ],
"route": "file/{fileName}"
},
{
"name": "myFile",
"type": "blob",
"path": "your-container-name/{fileName}",
"connection": "MyStorageConnectionAppSetting",
"direction": "in"
},
{
"type": "http",
"name": "res",
"direction": "out"
}
]
}

使用您的 index.js 如下:

module.exports = function(context, req) {
context.log('Node.js Queue trigger function processed', context.bindings.myFile);
const fileToReturn = context.bindings.myFile;
// you return it here with context.res = ...
context.done();
};

您还肤浅地提到了不属于您的问题但被提及的日志记录。我建议查看 Azure Application Insights .它可能会达到目的。

关于javascript - 如何读取 Azure 函数 HTTP 请求的参数并使用 blob 存储中的文件进行响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57643760/

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