如何在不编写自己的程序的情况下将一些文件上传到Azure blob存储中?

时间:2011-07-05 14:10:09

标签: windows azure azure-storage azure-storage-blobs

我创建了一个Azure存储帐户。我有一个400兆字节的.zip文件,我想将其放入blob存储空间供以后使用。

如果不编写代码,我怎么能这样做?那有接口吗?

15 个答案:

答案 0 :(得分:36)

免费工具:

  1. Visual Studio 2010 - 安装Azure工具,您可以在服务器资源管理器中找到blob
  2. Cloud Berry Lab用于Azure Blob存储的CloudBerry Explorer
  3. ClumpsyLeaf CloudXplorer
  4. CodePlex的Azure Storage Explorer(试用版本4 beta)
  5. 有一个名为Azure Blob Explorer的旧程序或者不再适用于新Azure SDK的程序。

    其中,我个人最喜欢CloudBerry Explorer。

答案 1 :(得分:18)

最简单的方法是使用Azure Storage 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

答案 2 :(得分:11)

如果您正在寻找可以这样做的工具,我建议您查看我们的工具Cloud Storage Studio(http://www.cerebrata.com/Products/CloudStorageStudio)。它是用于管理Windows Azure存储和托管服务的商业工具。您还可以在此处找到Windows Azure存储管理工具的完整列表:http://blogs.msdn.com/b/windowsazurestorage/archive/2010/04/17/windows-azure-storage-explorers.aspx

希望这有帮助。

答案 3 :(得分:6)

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");

答案 4 :(得分:4)

我使用Cyberduck来管理我的blob存储。

免费且易于使用。它也适用于其他云存储解决方案。

我最近也发现了这个:CloudXplorer

希望它有所帮助。

答案 5 :(得分:4)

There is a new OpenSource tool provided by Microsoft :

  • Project Deco - Crossplatform Microsoft Azure Storage Account Explorer.

Please, check those links:

答案 6 :(得分:2)

您可以使用Cloud Combine将可靠,快速的文件上传到Azure blob存储。

答案 7 :(得分:2)

使用Microsoft AzCopy实用程序的简单批处理文件可以解决这个问题。您可以将文件拖放到以下批处理文件中以上载到blob存储容器中:

upload.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标志),而不是上传整个目录。

答案 8 :(得分:1)

您可以使用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 huge files to the Azure blob from a web page

答案 9 :(得分:1)

您可以使用命令提示符将文件上传到Azure存储帐户Blob。

安装 Microsoft Azure存储工具

然后将其上传到您的帐户blob将CLI命令:

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

希望它能帮助...... :)

答案 10 :(得分:1)

在容器视图中,新的Azure门户在预览中有一个“编辑器”菜单选项。允许您从Portal UI直接将文件上载到容器

答案 11 :(得分:0)

我已经使用了post中提到的所有工具,并且所有工作都适用于块blob。然而,我最喜欢的是BlobTransferUtility

默认情况下,BlobTransferUtility仅阻止blob。但是,只更改2行代码,您也可以上传页面blob。如果您像我一样需要上传虚拟机映像,那么它需要是一个页面blob。

(差异请see this MSDN article.

要上传页面blob,只需更改BlobTransferHelper.cs的第53和62行

new Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob

new Microsoft.WindowsAzure.Storage.Blob.CloudPageBlob

了解此应用程序的唯一另一件事是在首次运行程序时取消选中HELP以查看实际用户界面。

答案 12 :(得分:0)

查看此帖子Uploading to Azure Storage,其中介绍了如何通过PowerShell轻松上传任何文件到Azure Blob存储。

答案 13 :(得分:0)

您可以使用Azcopy工具将所需文件上传到azure默认存储区块blob你可以根据需要更改模式

<强>语法

AzCopy /Source :  /Destination /s

答案 14 :(得分:-1)

尝试Blob Service API

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

但是,400mb是一个文件,我不确定单个API调用是否会处理这样大小的内容,您可能需要将其拆分并使用自定义代码重建。