我创建了一个Azure存储帐户。我有一个400兆字节的.zip文件,我想将其放入blob存储空间供以后使用。
如果不编写代码,我怎么能这样做?那有接口吗?
答案 0 :(得分:36)
免费工具:
有一个名为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)
答案 5 :(得分:4)
There is a new OpenSource tool provided by Microsoft :
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。
要上传页面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调用是否会处理这样大小的内容,您可能需要将其拆分并使用自定义代码重建。