2014-12-02 129 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