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

大卫

好的,所以我正在使用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了。

像这样的东西:https:// [ACCOUNT_NAME] .blob.core.windows.net:443 / [CONTAINER_NAME] / [BLOB_NAME]?st = 2013-12-13T17%3A33%3A40Z&se = 2013-12-13T18%3A33% 3A40Z&sr = b&sp = r&sig = Tplf5%2Bg%2FsDQpRafrtVZ7j0X31wPgZShlwjq2TX22mYM%3D

问题是,当我使用临时URL并将其插入浏览器时,它只会下载图像而不是查看图像(在这种情况下,这是一个简单的jpg文件)。

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

链接正确,并下载正确的文件...

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

谢谢大卫

更新

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

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

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

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

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

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

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

更新2

好的,作为一个愚蠢的测试,我将页面加载时间以及img标签从临时网址获取源代码的时间延迟了7秒。这似乎可以解决问题(大部分时间),但是显然,即使有效,这也是一个糟糕的解决方案...

至少这可以验证,因为有时它可以工作,所以我的标记至少是正确的。

对于我的一生,我无法弄清楚为什么延误会有所作为...

有什么想法吗?

更新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.date.minutesFromNow相同的格式。看起来像这样:2013年12月13日星期五

当我这样做时,即使从浏览器中也看不到图像,更不用说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
}});

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

我上面提到的成功的新方法使总差异缩短了50分钟,并且完全没有任何延迟。

感谢您抽出宝贵的时间,迈克!

麦克·沃

简短版:分布式系统(包括Azure)中会发生一些时间漂移。在创建SAS的代码中,而不是将Date.now()的开始时间设置为过去的一两分钟。然后,您应该可以消除延迟。

较长版本:创建签名并添加Date.now的计算机上的时钟可能比BLOB存储中的计算机快几秒钟。当立即向URL请求时,BLOB服务尚未达到BLOB的“开始时间”,因此抛出403。因此,通过将开始时间设置为过去的几秒钟,甚至是开始的时间,当前,如果您想覆盖大量的时钟漂移,则可以处理时钟漂移。

更新:经过一番尝试和错误:确保创建临时SAS时,它不能超过一个小时。将开始时间设置为过去的几分钟,然后设置为60分钟,则太大了。使其过期一点,然后在不到一个小时的时间内过期。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

如何从新的Firebase存储下载和查看图像?

来自分类Dev

如何更改文件权限以查看图像

来自分类Dev

如何从 Python Azure 存储下载 Blob 图像并从中创建图像对象?

来自分类Dev

如何使用图像 URI 从 android 画廊查看图像

来自分类Dev

如何从 azure blob 存储访问图像

来自分类Dev

使用C#将存储在Azure Blob存储中的图像下载为图像

来自分类Dev

如何有效地从URL查看图像

来自分类Dev

如何使用PhotoImage在python tkinter中查看图像

来自分类Dev

如何有效地从URL查看图像

来自分类Dev

如何在ACDSee的预览中查看图像?

来自分类Dev

从Azure Blob存储访问图像

来自分类Dev

如何将图像从Azure Blob下载到XAML

来自分类Dev

如何从节点表达式获取图像并在Angular 8中查看图像

来自分类Dev

Azure存储Blob容器Vituval文件夹图像在JAVA中下载

来自分类Dev

在Azure Blob存储中调整图像大小

来自分类Dev

在Azure Blob存储中加密图像

来自分类Dev

在Azure Blob存储中调整图像大小

来自分类Dev

Flutter AZURE BLOB图像上传-如何将使用移动相机捕获的图像上传到Azure Blob存储

来自分类Dev

如何使用php从受保护的文件夹查看图像?

来自分类Dev

如何添加允许查看图像背景的边框(“三角形”)?

来自分类Dev

如何查看数组中存储的图像?

来自分类Dev

如何在MySQL中存储Blob(图像)?

来自分类Dev

在浏览器中从FTP站点查看图像,而不是下载

来自分类Dev

查看图像网格

来自分类Dev

在网站中嵌入存储在Azure BLOB存储中的图像

来自分类Dev

用于在Azure Blob存储中存储图像的共享访问策略

来自分类Dev

如何始终在flutter应用程序中始终静态显示从Firebase存储下载的图像,单击即可打开并查看

来自分类Dev

如何查看存储在Google云存储桶中的图像?

Related 相关文章

  1. 1

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

  2. 2

    如何从新的Firebase存储下载和查看图像?

  3. 3

    如何更改文件权限以查看图像

  4. 4

    如何从 Python Azure 存储下载 Blob 图像并从中创建图像对象?

  5. 5

    如何使用图像 URI 从 android 画廊查看图像

  6. 6

    如何从 azure blob 存储访问图像

  7. 7

    使用C#将存储在Azure Blob存储中的图像下载为图像

  8. 8

    如何有效地从URL查看图像

  9. 9

    如何使用PhotoImage在python tkinter中查看图像

  10. 10

    如何有效地从URL查看图像

  11. 11

    如何在ACDSee的预览中查看图像?

  12. 12

    从Azure Blob存储访问图像

  13. 13

    如何将图像从Azure Blob下载到XAML

  14. 14

    如何从节点表达式获取图像并在Angular 8中查看图像

  15. 15

    Azure存储Blob容器Vituval文件夹图像在JAVA中下载

  16. 16

    在Azure Blob存储中调整图像大小

  17. 17

    在Azure Blob存储中加密图像

  18. 18

    在Azure Blob存储中调整图像大小

  19. 19

    Flutter AZURE BLOB图像上传-如何将使用移动相机捕获的图像上传到Azure Blob存储

  20. 20

    如何使用php从受保护的文件夹查看图像?

  21. 21

    如何添加允许查看图像背景的边框(“三角形”)?

  22. 22

    如何查看数组中存储的图像?

  23. 23

    如何在MySQL中存储Blob(图像)?

  24. 24

    在浏览器中从FTP站点查看图像,而不是下载

  25. 25

    查看图像网格

  26. 26

    在网站中嵌入存储在Azure BLOB存储中的图像

  27. 27

    用于在Azure Blob存储中存储图像的共享访问策略

  28. 28

    如何始终在flutter应用程序中始终静态显示从Firebase存储下载的图像,单击即可打开并查看

  29. 29

    如何查看存储在Google云存储桶中的图像?

热门标签

归档