簡體   English   中英

如何在不編寫自己的程序的情況下將一些文件上傳到 Azure blob 存儲?

[英]How do I upload some file into Azure blob storage without writing my own program?

我創建了一個 Azure 存儲帳戶。 我有一個 400 兆字節的 zip 文件,我想將其放入 blob 存儲以供以后使用。

我怎么能不寫代碼做到這一點? 有什么接口嗎?

免費工具:

  1. Visual Studio 2010 -- 安裝 Azure 工具,您可以在服務器資源管理器中找到 blob
  2. Cloud Berry Lab 的 CloudBerry Explorer 用於 Azure Blob 存儲
  3. ClumpsyLeaf CloudXplorer
  4. CodePlex 的 Azure 存儲資源管理器(試用版本 4 beta)

有一個舊程序稱為 Azure Blob Explorer 或不再適用於新的 Azure SDK 的程序。

其中,我個人最喜歡 CloudBerry Explorer。

最簡單的方法是使用 Azure 存儲 PowerShell。 它提供了許多命令來管理您的存儲容器/blob/table/queue。

對於您提到的情況,您可以使用Set-AzureStorageBlobContent將本地文件作為塊 blob 或頁面 blob 上傳到 azure 存儲中。

Set-AzureStorageBlobContent -Container containerName -File .\filename -Blob blobname

詳情請參考http://msdn.microsoft.com/en-us/library/dn408487.aspx

如果您正在尋找這樣做的工具,我建議您看看我們的工具 Cloud Storage Studio( http://www.cerebrata.com/Products/CloudStorageStudio )。 它是用於管理 Windows Azure 存儲和托管服務的商業工具。 You can also find a comprehensive list of Windows Azure Storage Management tools here: http://blogs.msdn.com/b/windowsazurestorage/archive/2010/04/17/windows-azure-storage-explorers.aspx

希望這可以幫助。

StorageClient 內置了這個。 不需要寫任何東西:

var account = new CloudStorageAccount(creds, false);

var client = account.CreateCloudBlobClient();

var blob = client.GetBlobReference("/somecontainer/hugefile.zip");

//1MB seems to be a pretty good all purpose size
client.WriteBlockSizeInBytes = 1024;

//this sets # of parallel uploads for blocks
client.ParallelOperationThreadCount = 4; //normally set to one per CPU core

//this will break blobs up automatically after this size
client.SingleBlobUploadThresholdInBytes = 4096;

blob.UploadFile("somehugefile.zip");

微軟提供了一個新的開源工具:

  • Project Deco - 跨平台 Microsoft Azure 存儲帳戶資源管理器。

請檢查這些鏈接:

我使用Cyberduck來管理我的 blob 存儲。

它是免費的並且非常易於使用。 它也適用於其他雲存儲解決方案。

我最近也發現了這個: CloudXplorer

希望能幫助到你。

您可以使用Cloud Combine將文件可靠快速地上傳到 Azure blob 存儲。

使用 Microsoft 的AzCopy實用程序的簡單批處理文件就可以解決問題。 您可以將文件拖放到以下批處理文件中以上傳到您的 Blob 存儲容器中:

上傳.bat

@ECHO OFF

SET BLOB_URL=https://<<<account name>>>.blob.core.windows.net/<<<container name>>>
SET BLOB_KEY=<<<your access key>>>

:AGAIN
IF "%~1" == "" GOTO DONE

AzCopy /Source:"%~d1%~p1" /Dest:%BLOB_URL% /DestKey:%BLOB_KEY% /Pattern:"%~n1%~x1" /destType:blob

SHIFT
GOTO AGAIN

:DONE
PAUSE

請注意,上述技術僅單獨上傳一個或多個文件(因為指定了Pattern標志),而不是上傳整個目錄。

您可以使用Command Prompt將文件上傳到 Azure 存儲帳戶 Blob。

安裝Microsoft Azure 存儲工具

然后將其上傳到您的帳戶 blob 將 CLI 命令:

AzCopy /Source:"filepath" /Dest:bloburl /DestKey:accesskey /destType:blob

希望能幫助到你.. :)

新的 Azure 門戶在容器視圖中的預覽中具有“編輯器”菜單選項。 允許您從 Portal UI 將文件直接上傳到容器

您可以使用 HTTP PUT 動詞直接將大文件上傳到 Azure Blob 存儲,我用下面的代碼嘗試過的最大文件是 4,6 Gb。 您可以像這樣在 C# 中執行此操作:

// write up to ChunkSize of data to the web request
void WriteToStreamCallback(IAsyncResult asynchronousResult)
{
    var webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
    var requestStream = webRequest.EndGetRequestStream(asynchronousResult);
    var buffer = new Byte[4096];
    int bytesRead;
    var tempTotal = 0;

    File.FileStream.Position = DataSent;

    while ((bytesRead = File.FileStream.Read(buffer, 0, buffer.Length)) != 0
        && tempTotal + bytesRead < CHUNK_SIZE 
        && !File.IsDeleted 
        && File.State != Constants.FileStates.Error)
    {
        requestStream.Write(buffer, 0, bytesRead);
        requestStream.Flush();

        DataSent += bytesRead;
        tempTotal += bytesRead;

        File.UiDispatcher.BeginInvoke(OnProgressChanged);
    }

    requestStream.Close();

    if (!AbortRequested) webRequest.BeginGetResponse(ReadHttpResponseCallback, webRequest);
}

void StartUpload()
{
    var uriBuilder = new UriBuilder(UploadUrl);

    if (UseBlocks)
    {
        // encode the block name and add it to the query string
        CurrentBlockId = Convert.ToBase64String(Encoding.UTF8.GetBytes(Guid.NewGuid().ToString()));
        uriBuilder.Query = uriBuilder.Query.TrimStart('?') + string.Format("&comp=block&blockid={0}", CurrentBlockId);
    }

    // with or without using blocks, we'll make a PUT request with the data
    var webRequest = (HttpWebRequest)WebRequestCreator.ClientHttp.Create(uriBuilder.Uri);
    webRequest.Method = "PUT";
    webRequest.BeginGetRequestStream(WriteToStreamCallback, webRequest);
}

UploadUrl 由 Azure 本身生成,並包含一個共享訪問簽名,這個 SAS URL 說明了在您的情況下,該 blob 的訪問權限是多長時間。 您可以像這樣生成 SAS URL :

readonly CloudBlobClient BlobClient;
readonly CloudBlobContainer BlobContainer;

public UploadService()
{
    // Setup the connection to Windows Azure Storage
    var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
    BlobClient = storageAccount.CreateCloudBlobClient();

    // Get and create the container
    BlobContainer = BlobClient.GetContainerReference("publicfiles");
}

string JsonSerializeData(string url)
{
    var serializer = new DataContractJsonSerializer(url.GetType());
    var memoryStream = new MemoryStream();

    serializer.WriteObject(memoryStream, url);

    return Encoding.Default.GetString(memoryStream.ToArray());
}

public string GetUploadUrl()
{
    var sasWithIdentifier = BlobContainer.GetSharedAccessSignature(new SharedAccessPolicy
    {
        Permissions = SharedAccessPermissions.Write,
        SharedAccessExpiryTime =
            DateTime.UtcNow.AddMinutes(60)
    });
    return JsonSerializeData(BlobContainer.Uri.AbsoluteUri + "/" + Guid.NewGuid() + sasWithIdentifier);
}

我也有一個關於該主題的主題,您可以在此處找到更多信息How to upload large files to the Azure blob from a web page

我已經使用了帖子中提到的所有工具,並且都可以很好地處理塊 blob。 然而,我最喜歡的是BlobTransferUtility

默認情況下,BlobTransferUtility 只阻止 blob。 但是,只需更改 2 行代碼,您也可以上傳頁面 blob。 如果您像我一樣需要上傳虛擬機映像,則它必須是頁面 blob。

(有關差異,請參閱此 MSDN 文章。

要上傳頁面 blob,只需將 BlobTransferHelper.cs 的第 53 和 62 行從

new Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob

new Microsoft.WindowsAzure.Storage.Blob.CloudPageBlob

關於此應用程序唯一需要了解的另一件事是在您第一次運行程序以查看實際 UI 時取消選中幫助。

查看這篇上傳到 Azure 存儲的帖子,其中解釋了如何通過 PowerShell 輕松地將任何文件上傳到 Azure Blob 存儲。

您可以使用 Azcopy 工具將所需文件上傳到 azure 默認存儲是塊 blob 您可以根據您的要求更改模式

句法

AzCopy /Source :  /Destination /s

嘗試Blob Service API

http://msdn.microsoft.com/en-us/library/dd135733.aspx

但是,400mb 是一個文件,我不確定單個 API 調用是否可以處理這種大小的內容,您可能需要將其拆分並使用自定義代碼進行重建。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM