Azure blob存储下载文件,而不是在浏览器中打开

时间:2015-06-19 14:33:35

标签: c# asp.net asp.net-mvc azure azure-storage-blobs

我使用此代码将文件上传到Azure blob存储,其中container是我的CloudBlobContainer

    public void SaveFile(string blobPath, Stream stream)
    {
        stream.Seek(0, SeekOrigin.Begin);
        CloudBlockBlob blockBlob = container.GetBlockBlobReference(virtualPath);

        blockBlob.Properties.ContentDisposition = 
"attachment; filename=" + Path.GetFileName(virtualPath);

        blockBlob.UploadFromStream(stream);
    }

然后当用户点击我的网页中的文件时,我试图触发下载,提示他们保存/打开文件。我这样做是通过调用一个返回重定向到blob URL的Action。

    public ActionResult LoadFile(string path)
    {    
        string url = StorageManager.GetBlobUrlFromName(path);
        return Redirect(url);
    }

问题是这将打开浏览器中的文件,例如当我期望用户留在我的页面上但开始下载文件时,用户将重定向远离我的网站并在浏览器中显示.jpg文件。

2 个答案:

答案 0 :(得分:1)

您可能错过的是在设置属性后调用blockBlob.SetProperties()

在我的代码上,它看起来像这样:

blob.CreateOrReplace();
blob.Properties.ContentType = "text/plain";
blob.Properties.ContentDisposition = "attachment; filename=" + Path.GetFileName(blobName);
blob.SetProperties(); // !!!  

答案 1 :(得分:0)

实现目标的一种方法是让MVC操作从blob存储中获取图像并返回File,即:

## Get offsets for dodge
dodgeWidth <- 0.9
nFactors <- length(levels(chunk[,Places]))
chunk[, `:=` (dPlaces = (dodgeWidth/nFactors)*(as.numeric(Places) - mean(as.numeric(Places))))]

limits <- aes(ymax = Value+CI, ymin=Value-CI)
dodge <- position_dodge(width=0.9)
p <- ggplot(chunk, aes(colour=Places, fill=Places, y=Value, x=Year))

p + geom_linerange(limits, position=dodge) +
  geom_point(position=dodge, size = 5) +
  geom_segment(position=dodge, aes(y=Expected.Value, yend=Expected.Value, 
                   x=as.numeric(Year)+dPlaces-0.1, xend=as.numeric(Year)+dPlaces+0.1)) +
  geom_step(aes(group=Year, y=Reference.Value, 
                x=as.numeric(Year)+dPlaces), color="black", linetype=2)