如何在不编写自己的程序的情况下将某些文件上传到 Azure Blob 存储?
Posted
技术标签:
【中文标题】如何在不编写自己的程序的情况下将某些文件上传到 Azure Blob 存储?【英文标题】:How do I upload some file into Azure blob storage without writing my own program? 【发布时间】:2011-09-28 20:49:51 【问题描述】:我创建了一个 Azure 存储帐户。我有一个 400 兆字节的 .zip 文件,我想将其放入 Blob 存储以供以后使用。
如何在不编写代码的情况下做到这一点?有接口吗?
【问题讨论】:
【参考方案1】:免费工具:
-
Visual Studio 2010 -- 安装 Azure 工具,您可以在服务器资源管理器中找到 blob
Cloud Berry Lab 的 CloudBerry Explorer 用于 Azure Blob 存储
ClumpsyLeaf CloudXplorer
来自 CodePlex 的 Azure 存储资源管理器(试用版本 4 测试版)
有一个名为 Azure Blob Explorer 的旧程序或不再适用于新 Azure SDK 的程序。
其中,我个人最喜欢 CloudBerry Explorer。
【讨论】:
+1 带有 Azure 工具的 VS2012 也有这个功能,可能值得用这个更新你的答案 我刚刚检查过它,我知道它已经有一段时间了,但今天 CloudXplorer 可以显示 blob 属性、列出、创建和下载快照,甚至可以浏览许多容器文件的内容,例如 zip 和 vhds。为此目的,它很棒,我在其他工具中看不到。 Azure 现在有一个 Azure CLI 包 - 从 azure.microsoft.com/en-in/documentation/articles/… 下载它 - 非常好的文档并且可以正常工作! Anymore Azure 有一个用于此类文件操作的工具:Azure Storage Explorer,它具有用户友好的 GUI,并且使用 Azure 用户名和密码凭据可以轻松登录(以上是最新版本的链接) .【参考方案2】:最简单的方法是使用 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。
【讨论】:
谢谢@Yao!我想你是唯一真正回答这个问题的人! 这是恕我直言的最佳解决方案。要使其正常工作,您必须提供凭据,如下所述:***.com/a/18806356/897024【参考方案3】:如果您正在寻找这样做的工具,我建议您看看我们的工具 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
希望这会有所帮助。
【讨论】:
【参考方案4】: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");
【讨论】:
哦,如果您正在寻找一个不错的免费程序,请尝试 ClumsyLeaf CloudXplorer。效果很好。 评论实际上是 Ryan 的答案 :)。 OP 似乎正在寻找 GU我使用Cyberduck 来管理我的 Blob 存储。
它是免费的并且非常易于使用。它也适用于其他云存储解决方案。
我最近也发现了这个:CloudXplorer
希望对你有帮助。
【讨论】:
Cyberduck 删除了对 azure 的支持。 Cyberduck 现在再次支持 azure! betanews.com/2014/07/23/…【参考方案6】:微软提供了一个新的开源工具:
Project Deco - 跨平台 Microsoft Azure 存储帐户资源管理器。请检查这些链接:
下载二进制文件:http://storageexplorer.com/ 源代码:https://github.com/Azure/deco【讨论】:
【参考方案7】:您可以使用Cloud Combine 将文件可靠快速地上传到 Azure blob 存储。
【讨论】:
【参考方案8】:使用 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
标志),而不是上传整个目录。
【讨论】:
【参考方案9】:您可以使用命令提示符将文件上传到 Azure 存储帐户 Blob。
安装 Microsoft Azure 存储工具。
然后将其上传到您的帐户 blob 将 CLI 命令:
AzCopy /Source:"filepath" /Dest:bloburl /DestKey:accesskey /destType:blob
希望对你有帮助.. :)
【讨论】:
【参考方案10】:您可以使用 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
【讨论】:
【参考方案11】:新的 Azure 门户在容器视图中预览时有一个“编辑器”菜单选项。允许您从 Portal UI 直接将文件上传到容器
【讨论】:
【参考方案12】:我已经使用了帖子中提到的所有工具,并且都可以很好地处理块 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
关于这个应用程序,唯一需要了解的另一件事是在您第一次运行程序以查看实际 UI 时取消选中 HELP。
【讨论】:
【参考方案13】:查看这篇帖子 Uploading to Azure Storage,其中介绍了如何通过 PowerShell 轻松将任何文件上传到 Azure Blob 存储。
【讨论】:
【参考方案14】:您可以使用 Azcopy 工具将所需文件上传到 azure 默认存储是块 blob,您可以根据需要更改模式
语法
AzCopy /Source : /Destination /s
【讨论】:
【参考方案15】:试试Blob Service API
http://msdn.microsoft.com/en-us/library/dd135733.aspx
但是,400mb 是一个大文件,我不确定单个 API 调用是否可以处理这种大小的内容,您可能需要将其拆分并使用自定义代码重新构建。
【讨论】:
以上是关于如何在不编写自己的程序的情况下将某些文件上传到 Azure Blob 存储?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 SDK 的情况下将文件从 Android 上传到 Amazon S3
如何在不创建 IAM 用户的情况下将文件从 EKS 上传到 S3 存储桶?
如何在不上传 favicon 文件的情况下将 favicon 添加到 Google colab 上的 Flask 路由?