【问题标题】:Files upload to Windows Azure Blob文件上传到 Windows Azure Blob
【发布时间】:2014-01-23 20:23:02
【问题描述】:

我是 Web 开发的新手,但我的概念很混乱所以我有 2 个问题

1->我的 PDF 链接 URL“https://hrbcdev.blob.core.windows.net/uploads/UserForms/reportlayout-130334646861135641.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());
    }

【问题讨论】:

    标签: c# .net pdf azure knockout.js


    【解决方案1】:

    对于问题 (1) - 当您将 Content-Dispostion 标头设置为内联时,浏览器会尝试自行打开文件。如果设置为附件,则浏览器将尝试打开弹出窗口以下载文件。在这两种情况下,文件都将下载到客户端浏览器。所以这种行为完全取决于浏览器的类型。

    [编辑]我同意 Gaurav 的问题 (1),但 Blob 有可能将 Content-Type 作为 application/pdf 并将 Content-Disposition 作为附件。

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

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

    【讨论】:

      【解决方案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 您的意思是是否总是提示用户下载 blob 而不是内联显示它,最近 Windows Azure 存储宣布了一些变化,他们宣布的其中一件事是能够在斑点。对于您希望一直下载的 blob,请将其 Content-Disposition 属性设置为 attachment; filename=&lt;blob file name&gt;,然后将始终提示用户下载 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 对您的第二个问题的回答。

      【讨论】:

        猜你喜欢
        • 2013-01-01
        • 2011-02-07
        • 2014-02-06
        • 2017-03-14
        • 1970-01-01
        • 1970-01-01
        • 2012-02-03
        • 2017-01-24
        • 2017-08-19
        相关资源
        最近更新 更多