如何在不编写自己的程序的情况下将某些文件上传到 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 中的接口。【参考方案5】:

我使用Cyberduck 来管理我的 Blob 存储。

它是免费的并且非常易于使用。它也适用于其他云存储解决方案。

我最近也发现了这个:CloudXplorer

希望对你有帮助。

【讨论】:

Cyber​​duck 删除了对 azure 的支持。 Cyber​​duck 现在再次支持 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 路由?

如何在不丢失 exif 数据的情况下将 UIImage 转换为 JPEG?

在不使用字符串的情况下将图像上传到android中的服务器

如何在没有 XCode 的情况下将具有应用内购买的现有 .ipa 文件上传到 ituneconnect