2014-01-06 145 views
0

我在Web开发新的,但我困惑我的概念,所以我有2个问题文件上传到Windows Azure的Blob

1->是我的PDF链接URL“https://hrbcdev.blob.core.windows.net/uploads/UserForms/reportlayout-130334646861135641.pdf”和任何正常的PDF谷歌之间的区别链接“http://www.syncfusion.com/Content/downloads/ebook/Knockoutjs_Succinctly.pdf”,因为我的链接下载PDF,而另一个在浏览器中打开。

2->我使用Windows Azure Blob将PDF文件上传到服务器,但是当我点击这些文件时,它会自动开始下载。但我想打开一个新的选项卡,而不是下载....文件上传过程中是否有任何属性,告诉服务器文件是否可下载。这是我的代码:

[HttpPost] 
    public virtual ActionResult UploadFile(string kind, int? entityId = null) // optionally receive values specified with Html helper 
    { 
     // here we can send in some extra info to be included with the delete url 
     var statuses = new List<ViewDataUploadFileResult>(); 
     var thumbnailKind = AppConfig.KnownKind(kind); 
     var uploadLocation = AppConfig.UploadLocation(thumbnailKind); 
     for (var i = 0; i < Request.Files.Count; i++) 
     { 
      var storage = new AzureFileStorage(); 

      var st = storage.StoreFile(x => 
          { 
           x.File = Request.Files[i]; 
           x.Kind = thumbnailKind; 
           //note how we are adding an additional value to be posted with delete request 
           //and giving it the same value posted with upload 
           x.DeleteUrl = Url.Action(MVC.FileUploader.DeleteFile(entityId)); 
           x.StorageDirectory = uploadLocation.Path; 
           x.UrlPrefix = uploadLocation.Url; 
          }); 


      statuses.Add(st); 
     } 
     var json = new { files = statuses }; 
     return Request.Headers["ACCEPT"].Contains("application/json") 
      ? Json(json) 
      : (ActionResult)Content(json.ToJson()); 
    } 

回答

2

1->的区别是什么之间我的PDF链接URL “https://hrbcdev.blob.core.windows.net/uploads/UserForms/reportlayout-130334646861135641.pdf” 和任何正常的PDF谷歌链接 “http://www.syncfusion.com/Content/downloads/ebook/Knockoutjs_Succinctly.pdf“ ,因为我的链接下载PDF,而另一个在 浏览器中打开。

请检查blob的content-type属性。很有可能,它会回到application/octet-stream(这是blob存储中的默认内容类型)。由于浏览器(特别是Chrome/Firefox)依赖此属性来决定是在浏览器中内联显示内容还是下载文件,并且该文件未设置为application/pdf,因此浏览器决定下载该文件。即使在blob上传后,您也可以以编程方式更改blob的content-type属性。

2->我使用Windows Azure Blob将PDF文件上传到服务器,但是当我点击这些文件时它会自动开始下载。但 我想打开一个新的标签,而不是下载....文件上传过程中是否有任何 属性,告诉服务器关于 文件是否可下载。

通过downloadable假设你的意思是用户是否总是提示下载团块,而不是内联显示它的,最近的Windows Azure存储宣布了一些变化和他们宣布的事情之一是设置一个blob Content-Disposition特性的能力。对于您希望一直下载的blob,请将其Content-Disposition属性设置为attachment; filename=<blob file name>,然后始终提示用户下载blob。您可以在这里阅读更多关于新更改的信息:http://blogs.msdn.com/b/windowsazurestorage/archive/2013/11/27/windows-azure-storage-release-introducing-cors-json-minute-metrics-and-more.aspx

但是,如果通过downloadable您的意思是确保blob,请参阅@ramiramilu给你的第二个问题的答案。

1

对于问题(1) - 当您设置内容Dispostion头内嵌,浏览器尝试本身就是打开该文件。如果它被设置为附件,那么浏览器将尝试打开弹出窗口来下载文件。无论是在这两种情况下,文件都将被下载到客户端浏览器。所以这个行为完全取决于浏览器的类型。

[编辑]对于问题(1),我同意Gaurav的观点,但blob具有Content-Type作为application/pdf和Content-Disposition作为附件的可能性。

对于问题(2) - 您可以通过修改容器访问修饰符(如Private,public container,public blob)来限制对文件的访问。您可以将其设置为私有,以便可以直接访问该容器的内容。按照Microsoft - “默认情况下,容器是私有的,只能由帐户所有者访问。为了允许对容器中的Blob进行公共读取访问,而不是容器属性和元数据,请使用”Public Blob“选项要允许容器和斑点完全公共读取权限,使用“公共容器”选项

您也可以使用保护您的斑点SAS - http://www.dotnetcurry.com/showarticle.aspx?ID=901

相关问题