Я создал учетную запись Azure Storage. У меня есть 400-мегабайтный .zip файл, который я хочу поместить в хранилище blob для последующего использования.
Как я могу это сделать без написания кода? Есть ли для этого интерфейс?
Я создал учетную запись Azure Storage. У меня есть 400-мегабайтный .zip файл, который я хочу поместить в хранилище blob для последующего использования.
Как я могу это сделать без написания кода? Есть ли для этого интерфейс?
Бесплатные инструменты:
Появилась старая программа Azure Blob Explorer или что-то, что больше не работает с новым Azure SDK.
Из них лично мне нравится CloudBerry Explorer.
Самый простой способ - использовать Azure Storage PowerShell. Он предоставил множество команд для управления контейнером хранения /blob/table/queue.
Для вашего упомянутого случая вы можете использовать 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 Storage и Hosted Service. Вы также можете найти исчерпывающий список инструментов управления Windows Azure Storage Management здесь: 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
Надеюсь, что это поможет.
Появился новый инструмент OpenSource, предоставляемый Microsoft:
Пожалуйста, проверьте эти ссылки:
Вы можете использовать Cloud Combine для надежной и быстрой загрузки файлов в хранилище Azure blob.
Простой командный файл с использованием утилиты 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
) вместо загрузки всего каталога.
Вы можете загружать большие файлы непосредственно в хранилище Azure Blob непосредственно с помощью HTTP PUT-глагола, самый большой файл, который я пробовал с приведенным ниже кодом, составляет 4,6 Гб. Вы можете сделать это на С# следующим образом:
// 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 и содержит подпись общего доступа, этот URL SAS указывает, где будет загружаться blob, и сколько времени предоставляется доступ к безопасности (доступ на запись в вашем случае). Вы можете создать URL-адрес SAS следующим образом:
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);
}
У меня также есть тема по этому вопросу, где вы можете найти более подробную информацию здесь Как загрузить огромные файлы в Azure blob с веб-страницы
Вы можете загружать файлы в Azure Storage Blob с помощью Командная строка.
Установите Средства хранения Microsoft Azure.
И затем загрузить его в свой аккаунт blob будет команда CLI:
AzCopy /Source:"filepath" /Dest:bloburl /DestKey:accesskey /destType:blob
Надеюсь, что это поможет...:)
Я использовал все инструменты, упомянутые в сообщении, и все работают умеренно хорошо с блочными блобами. Однако мой любимый BlobTransferUtility
По умолчанию BlobTransferUtility блокирует только блокировки. Однако изменение всего 2 строки кода, и вы также можете загружать страницы. Если вам, как и мне, нужно загрузить образ виртуальной машины, ему нужно быть блобом страницы.
(для разницы пожалуйста см. эту статью MSDN.)
Чтобы загрузить страницы, вы просто меняете строки 53 и 62 из BlobTransferHelper.cs из
new Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
к
new Microsoft.WindowsAzure.Storage.Blob.CloudPageBlob
Единственное, что нужно знать об этом приложении, - снять HELP, когда вы впервые запустите программу, чтобы увидеть фактический интерфейс.
Отметьте это сообщение Загрузка в Azure Storage, где объясняется, как легко загрузить любой файл через PowerShell в Azure Blob Storage.
Вы можете использовать инструмент Azcopy для загрузки необходимых файлов в хранилище по умолчанию azure - блок blob u может изменять шаблон в соответствии с вашим требованием
Синтаксис
AzCopy /Source : /Destination /s
Попробуйте Blob Service API
http://msdn.microsoft.com/en-us/library/dd135733.aspx
Однако 400mb - это большой файл, и я не уверен, что один вызов API будет иметь дело с чем-то такого размера, вам может понадобиться разбить его и восстановить с помощью настраиваемого кода.