我们如何使用代理和 NodeJS 从 azure 存储下载 blob?
Posted
技术标签:
【中文标题】我们如何使用代理和 NodeJS 从 azure 存储下载 blob?【英文标题】:how can we use proxy with NodeJS to download a blob from azure storage? 【发布时间】:2021-11-08 13:55:50 【问题描述】:我有一个 .exe 设置 blob 文件存储在 azure 存储容器中。我正在使用 blob 服务获取带有 SAS 令牌的链接,以便在客户端下载应用程序。现在我想使用 NodeJS 代理服务器从使用 blob 服务方法 getBlobToText() 后作为响应获得的链接进行 api 调用。使用代理点击链接后,我在浏览器端/客户端下载了一个文件,但下载后该文件已损坏,并且它没有 .exe 扩展名。
const express = require('express');
const https = require('https');
const http= require('http')
const app = express();
const fs=require('fs')
const bodyParser = require('body-parser')
const server=http.createServer(app)
app.use(bodyParser.json())
app.use(bodyParser.urlencoded( extended: true ))
app.get('/subscription/launcher', function (req, res)
const url= res.url
https.get(url, function (resp)
res.setHeader('Content-type', resp.headers['content-type']);
res.setHeader('x-ms-blob-type',resp.headers['x-ms-blob-type'])
res.setHeader('x-ms-request-id',resp.headers['x-ms-request-id'])
res.setHeader('ETag',resp.headers['etag'])
res.setHeader('Server',resp.headers['server'])
res.setHeader('x-ms-lease-status',resp.headers['x-ms-lease-status'])
res.setHeader('Last-Modified',resp.headers['last-modified'])
res.setHeader('x-ms-version',resp.headers['x-ms-version'])
res.setHeader('Content-Length',resp.headers['content-length'])
resp.pipe(res);
);
);
server.listen(9000,()=>
console.log('connected')
);
谁能帮我理解为什么我在下载时没有得到正确的 .exe 扩展文件,或者有什么可能的方法吗?
【问题讨论】:
我试图从门户下载它显示未经确认的文件并抛出警告这种类型的文件可能会损害您的设备,但是当我忽略它并单击保持下载时,它会以适当的扩展名下载。 【参考方案1】:这似乎是 Windows 上的问题,但不是来自 Azure 端,而且您的代码似乎很好。
我尝试复制并发现每当我尝试下载特定于 .ps 和 .exe 扩展名的文件时都会收到此警告。
因此,对于解决方法,我忽略它并单击保持下载并使用适当的扩展名。
输出——
【讨论】:
谢谢,是的,这可能是原因 您好@SumitSingh,如果回答对您有帮助,请Accept it as an Answer,以便遇到相同问题的其他人可以找到此解决方案并解决他们的问题 您好@SumitSingh,如果我的回答对您有帮助,您可以接受它作为答案(单击答案旁边的复选标记将其从灰色切换为已填充。)。这对其他社区成员可能是有益的。谢谢以上是关于我们如何使用代理和 NodeJS 从 azure 存储下载 blob?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用代理从 Cosmos SDK .Net 连接到 Azure Cosmos?
使用NodeJS,如何将文件上传到azure容器/目录(如:test-container/folder-test)
如何从 Azure DevOps DACPAC 部署中获取漂移报告?