[英]Files upload to Windows Azure Blob
我是Web开发的新手,但我的概念令人困惑,所以我有2个问题
1->我的PDF链接URL“ https://hrbcdev.blob.core.windows.net/uploads/UserForms/reportlayout-130334646861135135.pdf ”和任何常规的PDF Google链接“ 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-130334646861135135.pdf ”和任何常规的PDF Google链接“ 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
,是指是否总是提示用户下载Blob而不是内联显示它,最近Windows Azure存储宣布了一些更改,他们宣布的一件事是可以在Blob上设置Content-Disposition
属性。 对于您希望一直下载的Blob,请将其Content-Disposition
属性设置为attachment; filename=<blob file name>
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-和更多.aspx 。
但是,如果通过downloadable
获取安全性,请参阅@ramiramilu对第二个问题的回答。
对于问题(1)-当您将Content-Dispostion标头设置为内联时,浏览器会尝试自行打开文件。 如果将其设置为附件,则浏览器将尝试打开弹出窗口以下载文件。 在这两种情况下,文件都将下载到客户端浏览器。 因此,此行为纯粹取决于浏览器的类型。
[编辑]我同意问题(1)的高拉夫(Gaurav),但是有可能将Content-Type作为application / pdf和Content-Disposition作为附件。
对于问题(2)-您可以通过修改容器访问修饰符(例如“私有”,“公共容器”,“公共blob”)来限制文件访问。 您可以将其设置为私有,以便可以直接访问该容器的内容。 按照Microsoft的规定-“ 默认情况下,容器是私有的,只能由帐户所有者访问。要允许对容器中的Blob(而不是容器属性和元数据)进行公开读取访问,请使用” Public Blob“选项。要允许对容器和Blob进行完全公共的读取访问,请使用“公共容器”选项。
您还可以使用SAS保护您的斑点-http: //www.dotnetcurry.com/showarticle.aspx? ID=901
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.