我创建了一个 Azure 存储帐户。我有一个 400 兆字节的 .zip 文件,我想将其放入 blob 存储以供以后使用。
我怎么能不写代码做到这一点?有什么接口吗?
我创建了一个 Azure 存储帐户。我有一个 400 兆字节的 .zip 文件,我想将其放入 blob 存储以供以后使用。
我怎么能不写代码做到这一点?有什么接口吗?
免费工具:
有一个名为 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
如果您正在寻找这样做的工具,我建议您看看我们的工具 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
希望这可以帮助。
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");
微软提供了一个新的开源工具:
请检查这些链接:
您可以使用Cloud Combine将文件可靠快速地上传到 Azure Blob 存储。
可以使用命令提示符将文件上传到 Azure 存储帐户 Blob 。
安装Microsoft Azure 存储工具。
然后将其上传到您的帐户 blob 将 CLI 命令:
AzCopy /Source:"filepath" /Dest:bloburl /DestKey:accesskey /destType:blob
希望能帮助到你.. :)
使用 MicrosoftAzCopy
实用程序的简单批处理文件就可以解决问题。您可以将文件拖放到以下批处理文件中以上传到您的 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
指定了标志),而不是上传整个目录。
您可以使用 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
在容器视图中时,新的 Azure 门户在预览中具有“编辑器”菜单选项。允许您从 Portal UI 将文件直接上传到容器
我已经使用了帖子中提到的所有工具,并且都可以很好地处理块 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 调用是否可以处理这种大小的内容,您可能需要拆分它并使用自定义代码重新构建。