AzureStorageアカウントを作成しました。後で使用するためにblobストレージに入れたい400メガバイトの.zipファイルがあります。
コードを書かずにそれを行うにはどうすればよいですか?そのためのインターフェースはありますか?
AzureStorageアカウントを作成しました。後で使用するためにblobストレージに入れたい400メガバイトの.zipファイルがあります。
コードを書かずにそれを行うにはどうすればよいですか?そのためのインターフェースはありますか?
無料ツール:
Azure Blob Explorer と呼ばれる古いプログラムや、新しい Azure SDK では動作しなくなったプログラムがありました。
これらの中で、私は個人的に CloudBerry Explorer が一番気に入っています。
最も簡単な方法は、Azure Storage PowerShell を使用することです。ストレージ コンテナー/BLOB/テーブル/キューを管理するための多くのコマンドが用意されています。
上記のケースでは、ローカル ファイルをブロック BLOB またはページ BLOB として Azure ストレージにアップロードできるSet-AzureStorageBlobContentを使用できます。
Set-AzureStorageBlobContent -Container containerName -File .\filename -Blob blobname
詳細については、http://msdn.microsoft.com/en-us/library/dn408487.aspxを参照してください。
そのためのツールをお探しの場合は、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");
Cyberduckを使用してブロブ ストレージを管理しています。
無料でとても使いやすいです。他のクラウド ストレージ ソリューションとも連携します。
私も最近これを見つけました:CloudXplorer
それが役に立てば幸い。
Microsoft が提供する新しい OpenSource ツールがあります。
これらのリンクを確認してください:
Cloud Combineを使用して、Azure Blob Storage への信頼性の高い迅速なファイル アップロードを行うことができます。
AzCopy
Microsoft のユーティリティを使用した単純なバッチ ファイルで問題は解決します。次のバッチ ファイルにファイルをドラッグ アンド ドロップして、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
、ディレクトリ全体をアップロードするのではなく、(フラグが指定されているため) 1 つ以上のファイルを個別にアップロードするだけであることに注意してください。
HTTP PUT 動詞を使用して、大きなファイルを Azure Blob Storage に直接アップロードできます。以下のコードで試した最大のファイルは 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);
}
詳細については、こちらのスレッドを参照してください。 Web ページから巨大なファイルを Azure BLOB にアップロードする方法
投稿に記載されているすべてのツールを使用しましたが、すべてブロック 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 を表示するときに HELP のチェックを外すことです。
を試すBlob Service API
http://msdn.microsoft.com/en-us/library/dd135733.aspx
ただし、400 MB は大きなファイルであり、単一の API 呼び出しでこのサイズのファイルを処理できるかどうかはわかりません。ファイルを分割して、カスタム コードを使用して再構築する必要がある場合があります。