如何在不编写自己的程序的情况下将某个file upload到Azure blob存储?
我创build了一个Azure存储帐户。 我有一个400兆字节的.zip文件,我想把它放到blob存储中供以后使用。
我怎么能不写代码呢? 有一些接口吗?
免费工具:
- Visual Studio 2010 – 安装Azure工具,您可以在Server Explorer中findBlob
- Cloud Berry实验室的CloudBerry资源pipe理器,用于Azure Blob存储
- ClumpsyLeaf CloudXplorer
- 来自CodePlex的Azure存储浏览器(尝试版本4testing版)
有一个名为Azure Blob Explorer的旧程序,或者不再适用于新的Azure SDK。
其中,我个人比较喜欢CloudBerry Explorer。
最简单的方法是使用Azure存储PowerShell。 它提供了许多命令来pipe理你的存储容器/ 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 。
如果您正在寻找一种工具,build议您查看我们的工具Cloud Storage Studio( http://www.cerebrata.com/Products/CloudStorageStudio )。 这是pipe理Windows Azure存储和托pipe服务的商业工具。 您还可以在这里find完整的Windows Azure存储pipe理工具列表: http : //blogs.msdn.com/b/windowsazurestorage/archive/2010/04/17/windows-azure-storage-explorers.aspx
希望这可以帮助。
StorageClient内置了这个function。 不需要写任何东西:
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");
我使用Cyberduck来pipe理我的blob存储。
它是免费的,非常容易使用。 它也适用于其他云存储解决scheme。
我最近还发现了这个: CloudXplorer
希望能帮助到你。
微软提供了一个新的开源工具:
- Project Deco – 跨平台Microsoft Azure存储帐户资源pipe理器。
请检查这些链接:
- 下载二进制文件: http : //storageexplorer.com/
- 源代码: https : //github.com/Azure/deco
您可以使用Cloud Combine将可靠和快速的file upload到Azure blob存储。
一个简单的batch file使用微软的AzCopy
实用程序将做的伎俩。 您可以将文件拖放到以下batch file中以上传到您的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
标志),而不是上传整个目录。
您可以直接使用HTTP PUT动词将大文件直接上传到Azure Blob存储,我用下面的代码尝试过的最大的文件是4,6Gb。 你可以在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要上传到的位置以及安全访问(在您的情况下为写入访问)的时间。 您可以像这样生成SASurl:
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); }
我也有一个主题的线程,你可以在这里find更多的信息如何上传大文件到网页的Azure blob
您可以使用命令提示符将文件上载到Azure存储帐户Blob。
安装Microsoft Azure存储工具 。
然后将其上传到您的帐户blob将CLI命令:
AzCopy /Source:"filepath" /Dest:bloburl /DestKey:accesskey /destType:blob
希望能帮助到你.. :)
我已经使用了后面提到的所有工具,并且所有的工作都适合块blob。 我最喜欢的是BlobTransferUtility
默认情况下,BlobTransferUtility只会阻塞blob。 不过,改变2行代码,你也可以上传页面斑点。 如果你像我一样需要上传虚拟机映像,那么它需要成为一个页面blob。
(有关区别,请参阅此MSDN文章。 )
要上传页面斑点,只需更改BlobTransferHelper.cs的第53和62行
new Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
至
new Microsoft.WindowsAzure.Storage.Blob.CloudPageBlob
关于这个应用程序唯一知道的另一件事是当你第一次运行程序来查看实际的用户界面时取消select帮助。
看看这篇文章上传到Azure存储 ,在这里介绍了如何通过PowerShell轻松上传任何文件到Azure Blob存储。
您可以使用Azcopy工具将所需的file upload到azure色的默认存储是块blob您可以根据您的要求更改模式
句法
AzCopy /Source : /Destination /s
尝试Blob Service API
http://msdn.microsoft.com/en-us/library/dd135733.aspx
然而,400MB是一个大文件,我不确定一个API调用将处理这种大小的东西,你可能需要拆分它,并重新使用自定义代码。