文件上载到Windows Azure Blob



我是Web开发的新手,但我混淆了我的概念,所以我有两个问题

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());
}

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/FFirefox)依赖于此属性来决定是在浏览器中内联显示内容还是下载文件,而此属性未设置为application/pdf,因此浏览器决定下载文件。即使在上载blob之后,也可以通过编程方式更改blob的内容类型属性。

2->我正在使用Windows Azure Blob将PDF文件上传到服务器,但当我点击这些文件时,它会自动开始下载。但是我想在一个新的选项卡中打开,而不是下载……有吗属性,该属性告诉服务器有关文件,无论是否可下载。

假设downloadable是指用户是否总是被提示下载blob而不是内联显示,最近Windows Azure Storage宣布了一些更改,他们宣布的一件事是能够在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)-当您将ContentDisposition标头设置为内联时,浏览器会尝试在自身中打开文件。如果设置为附件,则浏览器将尝试打开弹出窗口下载文件。无论在哪种情况下,文件都将下载到客户端浏览器。因此,这种行为完全取决于浏览器的类型。

[EDIT]我同意Gaurav对问题(1)的看法,但有可能将"内容类型"作为application/pdf并将"内容处置"作为附件的blob。

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

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