2014-12-02 90 views
0

我仅使用Microsoft Azure存储,并且不使用其他Azure产品/服务。我通过ftp类型客户端(GoodSync)将文件上传到我的存储blob,并且我需要在已经位于Blob中后根据文件扩展名更改所有文件的内容类型。我环顾四周,并没有发现如何在没有使用PowerShell的VPS之一的情况下执行此操作。我有什么选择,我该如何做到这一点?我真的需要一步一步来。更改Azure存储Blob中文件的内容类型

+0

您使用哪种编程语言?查找语言特定的存储客户端库并查找更新blob属性的函数(您希望更新的属性是Content-Type)。您可以从计算机运行代码。无需获得其他Azure服务。 – 2014-12-02 15:20:27

+0

我使用ASP,但随着一步一步的指示,我可以做任何事情。我是电脑爱好者,只需要在计算机上执行/运行/安装的指示。 – user2403260 2014-12-02 15:38:08

+0

我认为这将是太多解释。我认为,如果您使用其中一个可用存储资源管理器并更改blob的内容类型属性或者搜索“azure blob change content type”,并且我相信您会找到大量示例,那将会更容易。 – 2014-12-02 15:45:18

回答

0

我最近有同样的问题,所以我创建了一个简单的工具类,以“修复”基于文件扩展名的内容类型。您可以阅读详细信息here

您需要做的是分析Azure存储容器中的每个文件,并根据字典更新ContentType,以便为每个文件扩展名定义适合的MIME类型。

// Connect to your storage account 
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString); 

// Load Container with the specified name 
private CloudBlobContainer GetCloudBlobContainer(string name) 
{ 
    CloudBlobClient cloudBlobClient = _storageAccount.CreateCloudBlobClient(); 
    return cloudBlobClient.GetContainerReference(name.ToLowerInvariant()); 
} 
// Parse all files in your container and apply proper ContentType 
private void ResetContainer(CloudBlobContainer container) 
{ 
    if (!container.Exists()) return; 

    Trace.WriteLine($"Ready to parse {container.Name} container"); 
    Trace.WriteLine("------------------------------------------------"); 

    var blobs = container.ListBlobs().ToList(); 

    var total = blobs.Count; 
    var counter = 1; 

    foreach (var blob in blobs) 
    { 
     if (blob is CloudBlobDirectory) continue; 

     var cloudBlob = (CloudBlob)blob; 

     var extension = Path.GetExtension(cloudBlob.Uri.AbsoluteUri); 

     string contentType; 
     _contentTypes.TryGetValue(extension, out contentType); 
     if (string.IsNullOrEmpty(contentType)) continue; 

     Trace.Write($"{counter++} of {total} : {cloudBlob.Name}"); 
     if (cloudBlob.Properties.ContentType == contentType) 
     { 
      Trace.WriteLine($" ({cloudBlob.Properties.ContentType}) (skipped)"); 
      continue; 
     } 

     cloudBlob.Properties.ContentType = contentType; 
     cloudBlob.SetProperties(); 
     Trace.WriteLine($" ({cloudBlob.Properties.ContentType}) (reset)"); 
    } 
} 
 

_contentTypes是包含每个文件的扩展名相应的MIME类型的字典:

 
    private readonly Dictionary _contentTypes = new Dictionary() 
    { 
     {".jpeg", "image/jpeg"}, 
     {".jpg", "image/jpeg" } 
    }; 

内容类型和源代码的全部列表可以发现here

+0

有一种内置于.net的方法来获取内容类型。 System.Web.MimeMapping.GetMimeMapping(string fileName); – mark 2016-10-06 19:10:37