如何从 Azure Blob 存储查看图像而不是下载图像?

2023-11-24

好的,我正在使用 Node.js 和 Azure Blob 存储来处理一些文件上传。

当一个人上传图像时,我想向他们显示图像的缩略图。上传效果很好,我将其存储在我的 blob 中。

我使用了这个很好的链接(使用 Azure SDK for Node.js 中的 BlobService.getBlobURL() 生成 Azure 共享访问签名)帮助我创建此代码来创建共享访问临时 url。

process.env['AZURE_STORAGE_ACCOUNT'] = "[MY_ACCOUNT_NAME]";
process.env['AZURE_STORAGE_ACCESS_KEY'] = "[MY_ACCESS_KEY]";

var azure = require('azure');
var blobs = azure.createBlobService();

var tempUrl = blobs.getBlobUrl('[CONTAINER_NAME]', "[BLOB_NAME]",  { AccessPolicy: {
    Start: Date.now(),
    Expiry: azure.date.minutesFromNow(60),
    Permissions: azure.Constants.BlobConstants.SharedAccessPermissions.READ
}});

这样就可以创建一个 url 了。

像这样的东西:

问题是,当我获取临时 url 并将其插入浏览器时,它只会下载图像而不是查看它(在本例中它是一个简单的 jpg 文件)。

这转化为我的代码,我似乎无法在标签中查看它......

链接是正确的并且下载了正确的文件...

我需要做些什么才能查看图像而不是下载图像吗?

谢谢, 大卫

UPDATE

好的,所以我找到了这篇文章:http://social.msdn.microsoft.com/Forums/windowsapps/en-US/b8759195-f490-420b-a587-2bb614366ad2/embedding-images-from-blob-storage-in-ssrs-report-does-not-工作

基本上它告诉我上传时没有设置文件类型,因此浏览器不知道如何处理它。

我使用了这里的代码:http://www.snip2code.com/Snippet/8974/NodeJS-Photo-Upload-with-Azure-Storage/

这使我能够正确上传它,并且现在它可以在浏览器中正确查看。

我现在遇到的问题是,当我将 tempUrl 放入 img 标记中时,出现此错误:

无法加载资源:服务器响应状态为 403(服务器无法验证请求。请确保授权标头的值正确形成,包括签名。)

这是完全相同的链接,如果我将其发布到浏览器,它就可以正常工作......为什么我不能在图像标签中显示它?

UPDATE 2

好吧,作为一个愚蠢的测试,我在页面加载时和 img 标签从临时 url 获取源代码之间设置了 7 秒的延迟。这似乎解决了问题(大多数时候),但显然,即使它有效,这也是一个蹩脚的解决方案......

至少这证明了,因为它有时有效,所以我的标记至少是正确的。

我一生都无法弄清楚为什么延迟会产生一点影响......

想法?

UPDATE 3

好的,根据下面的评论,我尝试将开始时间设置为过去 20 分钟左右。

var start = moment().add(-20, 'm').format('ddd MMM DD YYYY HH:mm:ss');
var tempUrl = blobs.getBlobUrl(Container, Filename,  { AccessPolicy: {
    Start: start,
    Expiry: azure.date.minutesFromNow(60),
    Permissions: azure.Constants.BlobConstants.SharedAccessPermissions.READ
}});

我将开始变量的格式设置为与 azure.data.mines From Now 相同的格式。看起来像这样: 2013 年 12 月 13 日星期五 14:53:58

当我这样做时,即使从浏览器中也看不到图像,更不用说 img 标签了。不确定我是否在那里做错了什么......

更新 4 - 已答复

感谢光荣的@MikeWo,我找到了解决方案。正确的代码如下:

var tempUrl = blobs.getBlobUrl('[CONTAINER_NAME]', "[BLOB_NAME]",  { AccessPolicy: {
    Start: azure.date.minutesFromNow(-5),
    Expiry: azure.date.minutesFromNow(45),
    Permissions: azure.Constants.BlobConstants.SharedAccessPermissions.READ
}});

迈克是正确的,因为服务器的启动时间和我的本地主机之间似乎存在某种脱节,因此我需要将启动时间设置为过去。在更新 3 中我就是这样做的,但 Mike 注意到 Azure 不允许开始和结束时间超过 60 分钟...所以在更新 3 中我做了 -20 开始和 60 结束,即 80 分钟。

我上面的新的、成功的方法使总时间缩短了 50 分钟,而且完全没有任何延迟。

感谢您抽出时间迈克!


简短版本:分布式系统(包括 Azure)中会出现一些时间漂移。在创建 SAS 的代码中,不要执行 Date.now() 的开始时间,而是将开始时间设置为过去一两分钟。那么你应该能够消除延迟。

长版本:创建签名和添加 Date.now 的计算机上的时钟可能比 BLOB 存储中的计算机快几秒钟。当立即向 URL 发出请求时,BLOB 服务尚未达到 BLOB 的“开始时间”,因此会抛出 403。因此,通过将开始时间设置为过去几秒,甚至是开始时间今天,如果你想解决巨大的时钟漂移问题,你需要建立对时钟漂移的处理能力。

UPDATE:经过一番尝试和错误后:确保创建临时 SAS 时的时间不能超过一个小时。将开始时间设置为过去几分钟,然后将到期时间设置为未来 60 分钟,这太大了。让它过去一点,然后不到一个小时就到期了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 Azure Blob 存储查看图像而不是下载图像? 的相关文章

  • 对于实时网站使用 Node.js 或 Ringojs 安全吗?

    正如标题中所述 我想知道使用实际的 omg 平台 即 Node js 和 Ringo js 的实际版本 之一来开发网站是否安全 另外 我想知道他们是否支持cookie sessions以及他们如何处理多字段帖子 PHP中的fieldname
  • 使用 CLI 在 Azure 中上传文件

    我正在尝试练习以下任务 创建存储帐户 az 存储帐户创建 name heyatafroz25 resource group user fottsascvuzj 获取存储帐户密钥 az 存储帐户密钥列表 g user fottsascvuzj
  • HTML 格式的 Google Apps 脚本

    是否可以在我的 HTML 中使用 google apps 脚本 我希望能够从外部框架 例如 Node js 以纯 Javascript 形式从表单写入电子表格 https developers google com apps script
  • Bot Framework Node.js 发送给特定用户的临时消息

    我已经盯着这个问题好几个小时了 找不到解决方案 即使根据所有建议 它应该很容易 https learn microsoft com en us bot framework nodejs bot builder nodejs proactiv
  • 如何在Electron WebView中连接到代理?

    因为我可以通过连接到免费代理服务器 或付费 目前用作电子 JS 解决方案作为桌面应用程序 代理列表服务器示例 http proxylist hidemyass com http proxylist hidemyass com 您可以使用 s
  • Node JS - 如何检测用户语言

    我正在尝试在纯 Node js 中检查用户语言 而不使用 npm 的任何扩展 我使用了进程和全局命令 有很多规范但我找不到系统语言 这是获取默认区域设置的独立于操作系统 节点 浏览器的方法 let locale Intl DateTimeF
  • 如何解决 Socket.io 404(未找到)错误?

    我正在使用 Socket io 和 Express 在我的项目中 我有一个登录页面和一个主页 当我成功登录时 我导航到 localhost 3000 home 并收到以下错误 GET http localhost 3000 socket i
  • 从 Azure 事件中心获取事件后,我是否应该将其放入队列中?

    我目前正在开发一个托管在 Azure 上 使用 Azure 事件中心的应用程序 基本上 我从 Web API 向事件中心发送消息 或者应该说事件 并且我有两个侦听器 用于实时分析的流分析任务 标准辅助角色 根据接收到的事件计算一些内容 然后
  • 由于 Chrome 修订,Firebase puppeteer PDF 功能超时

    我有一个 Firebase 函数来创建 PDF 文件 最近 由于 Chrome 修订版 而超时 我既不明白错误消息 也不明白出了什么问题 当我在 MacOS 下将其本地部署时 该功能有效 TimeoutError Timed out aft
  • 如何将 emscripten 浏览器输入法从 window.prompt 更改为更合理的输入法?

    我有一个 C 函数 一旦调用它就会消耗来自 stdin 的输入 使用 emscripten 将此函数导出到 javascript 会导致调用 window prompt 与浏览器提示交互确实是一项乏味的任务 首先 您一次只能粘贴一行 其次
  • libxmljs 的替代品 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 目标 使用 Node js 访问网页 使用 xpath 语法操作 DOM 并打印新的 DOM libxm
  • 如何使用Create React App安装React

    嗨 我对反应真的很陌生 我不知道如何实际安装它 也不知道我需要做什么才能在其中编写代码 我下载了node js并且安装了v12 18 3以及NPM 6 14 6 但是每次我尝试在许多网站上提到的create react app安装方法中输入
  • 根据特定字符获取整个字符串或子字符串

    我有一个包含 MIME 类型的字符串 例如application json 现在我想将其与实际的 HTTP 标头进行比较 在本例中content type 如果标头包含 MIME 类型 那么就很简单 if mimeType contentT
  • 下载中带有文件名的 NodeJS sendFile

    我尝试使用以下代码将文件发送给客户端 router get get myfile function req res next res sendFile other file name dat 它工作正常 但当用户从以下网址下载此文件时我需要
  • 使用 KeystoneJs 的 Mongoose 二级种群 [重复]

    这个问题在这里已经有答案了 我需要用 Mongoose Keystone 填充两层 但遇到了障碍 我有 3 个模型 地区 国家和城市 地区包含国家 国家包含城市 我的模型 型号区域 var Region new keystone List
  • Azure Blob 存储 URL:WASB:// 与 HTTP://

    我发现有不同类型的 URL 可以访问 Blob 存储 如下所示 wasb email protected cdn cgi l email protection https email protected cdn cgi l email pr
  • 如何获取 Azure Active Directory 登录用户的密码策略

    我想使用 graph api 或 adal 获取 C 中登录用户的密码到期日期 有了这个问题 我知道如何使用 PowerShell 获取密码策略以及到期日期 但还不确定如何使用 C 在 PowerShell 中获取 Azure Active
  • 通过 node-http-proxy 保留基于 cookie 的会话

    我有一个简单的基于 Express 的 Node js Web 服务器 用于开发 JavaScript 应用程序 我将服务器设置为使用 node http proxy 来代理应用程序向在不同域和端口上运行的 Jetty 服务器发出的 API
  • 流星内存不足

    我正在使用流星来制作报废引擎 我必须执行一个 HTTP GET 请求 这会向我发送一个 xml 但这个 xml 大于 400 ko 我得到一个异常 内存不足 result Meteor http get http SomeUrl com 致
  • 从 Azure 应用服务连接到 MongoDB Atlas 集群

    我在 Azure 上有一个 Web 应用程序 它连接到 Atlas cloud mongodb com 上托管的 MongoDB 集群 我想使用 Atlas 这样我就不必关心 MongoDb 配置 问题是我的集群连接超时 我必须在我的 mo

随机推荐

  • C# 中的非对称加密示例

    我需要通过 TCP 连接将机密数据发送到服务器 我做了很多研究并且理解了理论部分 根据我的研究 我想做以下事情 注意有一个服务器和一个客户端 我们假设客户端或服务器的公钥可以被任何人获取 客户创建他的公钥和私钥 他能够用他的私钥加密并用他的
  • 不带值的 MediaWiki URL 参数

    The query的一部分URL似乎由键值对组成 并由相关联 我一直习惯使用 jQuery param 函数对我的查询字符串进行 URL 编码 因为我发现它使我的代码更具可读性和可维护性 在过去的几天里 我发现自己在调用 MediaWiki
  • SimpleDateFormat 类中有哪些可用的日期格式?

    谁能告诉我 SimpleDateFormat 类中可用的日期格式 我已经浏览了 api 但找不到满意的答案 非常感谢任何帮助 下面详细描述了日期和时间格式 SimpleDateFormat Java Platform SE 7 日期和时间模
  • 如何将 String 上的 PageRequest 作为数值进行排序

    我目前有一个系统 可以过滤和排序数据库中的记录并将它们作为分页对象返回 其中一行是这样的 final PageRequest request new PageRequest this pagingSettings getPageNumber
  • 已知起点、终点和半径,如何求圆弧圆周上的点?

    请参阅下图以直观地了解我的问题 我有点 1 和 2 的坐标 它们是通过使用其他可用信息的公式得出的 参见问题 如何计算已知半径和圆心的圆上的点 我现在需要做的 与轨道建设分开 是将点 1 和点 2 之间的点绘制为绿色 这样做的最佳方法是什么
  • Cordova 6.4.0 Android 构建发布 apk 时出错

    我有一个项目在 cordova 6 3 1 上运行良好 然后我将 cordova 和我的项目更新到 6 4 0 在此之后 我第一次构建时 gradle 也自动更新了 现在我遇到一个重要的问题 我需要在 build json 文件中包含密钥库
  • MousePressEvent,QGraphicsView中的位置偏移

    我有一些困难QGraphicsView and QGraphicsScene 当我缩放 取消缩放场景并使用 mousePressEvent 创建项目时 我的位置有一个偏移 如何避免这种情况 event pos 似乎是问题 from PyQt
  • 如何使用 selenium 3.0.0 beta 关闭 geckodriver

    环境 Win 7 Selenium 3 0 0 测试版 FireFox 49 0 1 System setProperty webdriver gecko driver C geckodriver exe WebDriver driver
  • Apache ProxyPass 未加载资源

    我配置了 apache proxypass 它可以工作 但无法加载图像 javascript CSS 等 我想 proxypass 到另一台服务器 而不是本地主机 以下是我的配置 查看错误图像
  • Google 地图 API 的服务帐户

    On the Google 云身份验证概述页面上对云服务进行了以下说明 对于几乎所有情况 无论您是在本地开发还是在外部开发 生产应用程序 您应该使用服务帐户 而不是 用户帐户或 API 密钥 考虑到这一点 我的问题是 当使用 Google
  • 异常处理 ASP.NET MVC Web API

    首先 是的 我们已经创建并正在使用一个继承自 ExceptionFilterAttribute 的异常过滤器 它会在应用程序启动时在我们的身份过滤器之后立即注册到配置中 并且如果我们的 API 内部某个地方发生错误 它的工作效果几乎与预期一
  • 如何处理 Web 驱动程序 Selenium python 浏览器或应用程序可能不安全的问题?

    我正在尝试自动登录 Gmail 但看到此错误 我认为这一定是因为该网站能够检测到自动化并阻止它 大家能告诉我如何克服这个问题吗 我的个人帐户没有发现此问题 但只有普通帐户才会出现此问题 In you account profile in S
  • 在 kableExtra() 中设置字幕格式

    是否可以将字幕格式设置为kableExtra 我想在编织时将表格的标题居中并加粗HTML in RMarkdown 我试图将桌子包裹起来CSS div文本居中的位置 但这并没有产生预期的结果 样本表 library kableExtra k
  • python下载速度极慢

    有没有办法提高Python上的url下载速度 我有一个用 VB6 编写的程序 无需尝试即可使用 Python 我已经转换了这个东西 现在正在尝试 Python linux 中的东西似乎慢得多 时间是原来的两倍 即使是该程序的初始版本似乎也比
  • Flutter 如何改变ListView中鼠标滚轮的滚动速度?

    我是初学者 我正在 Windows 下编写一个关于 Flutter 的应用程序 问题是 ListView 中的文本通过鼠标剪辑滚动得太慢 我尝试覆盖 ScrollPhysics 但没有成功 请提供一种改变滚动速度的工作方法 对于找到这篇文章
  • 通过Java JDBC连接Hive

    这里有一个问题从 java 连接到 Hive但我的是不同的 我的配置单元在 machine1 上运行 我需要使用在 machine2 上运行的 Java 服务器传递一些查询 据我了解 Hive 有一个 JDBC 接口 用于接收远程查询 我从
  • JSX 元素类型没有任何构造或调用签名。打字稿

    In case compose使用时出现错误JSX element type Option does not have any construct or call signatures redux 版本 3 7 2 import as Re
  • 网站图标 - 最佳实践 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 更新的问题 2022 年创建网站图标时的最佳实践是什么 这是 2013 年提出的原始问题 我正在尝试了解网站图标 触摸图标以及现在的平铺图标所需的所有这些不同尺寸和格式 我读过这
  • 如何在 iOS 7 中恢复 UIButton 边框?

    我建立了一个旧项目Xcode 5 中的 iOS SDK 6 1 然而 当应用程序在运行 iOS 7 的 iPhone 上运行时 UIbutton 是无边框的 我已经检查过 xib是 构建 gt 项目部署目标 5 0 如何配置 Xcode 5
  • 如何从 Azure Blob 存储查看图像而不是下载图像?

    好的 我正在使用 Node js 和 Azure Blob 存储来处理一些文件上传 当一个人上传图像时 我想向他们显示图像的缩略图 上传效果很好 我将其存储在我的 blob 中 我使用了这个很好的链接 使用 Azure SDK for No