我有一个 aspnet 应用程序,我将文件上传到 azure blob。我知道 azure 不会在容器中创建结构路径,而只是创建 blob,但您可以模拟在 uri 上放置“/”的目录。
即我上传文件列表,我的 uri 是这样的
http://myaccount.windowsazure.blob.net/MyProtocolID-01/MyDocumentID-01/FileName01.jpg http://myaccount.windowsazure.blob.net/MyProtocolID-01/MyDocumentID-01/FileName02.jpg http:// myaccount.windowsazure.blob.net/MyProtocolID-01/MyDocumentID-01/FileName03.jpg
我的下载方法:
public RemoteFile Download(DownloadRequest request)
{
var fileFinal = string.Format("{0}/{1}/{2}",request.IDProtocol ,request.IDDocument, request.FileName);
var blobBlock = InitializeDownload(fileFinal);
if (!blobBlock.Exists())
{
throw new FileNotFoundException("Error");
}
var stream = new MemoryStream();
blobBlock.DownloadToStream(stream);
return File(request.FileName)
}
private CloudBlob InitializeDownload(string uri)
{
var blobBlock = _blobClient.GetBlobReference(uri);
return blobBlock;
}
Run Code Online (Sandbox Code Playgroud)
这样,我只得到一个文件。但我需要查看并下载http://myaccount.windowsazure.blob.net/MyProtocolID-01/MyDocumentID-01/内的所有文件
谢谢
我问我是否可以,但我也想知道我是否应该这样做。
这是我的场景:我正在小批量接收 Avro 序列化消息。我想存储它们以供以后使用 Hive 表和 Avro SerDe 进行分析。我在 Azure 中运行,并将消息存储在 blob 中。我试图避免出现很多小斑点(因为我相信这会对 Hive 产生负面影响)。如果我已经将 Avro 标头写入 blob,我相信可以将 Avro 数据块附加到CloudBlockBlob.PutBlockAsync(). (只要我知道同步标记即可。)
但是,我检查了两个 .NET 库,它们似乎不支持我的方法。(我必须立即编写整个 Avro 容器文件)。
我采取的方法正确吗? 我在图书馆里错过了什么吗?
我的问题与此类似(但不同): 您可以将数据附加到现有的 Avro 数据文件吗?
我在 Azure Blob 存储中有不同类型的音频文件(wav、mp3...)。我想流式传输它们,但我也想从音频文件中的特定位置流式传输它们。例如,我希望一个流在文件的 0:00 秒开始,另一个流在文件的 01:15 秒开始。
这有可能吗?我知道有“DownloadRangeToStream”方法。用这个方法可以实现吗?即使这有效,我认为偏移量也会出现问题,因为文件头丢失了,对吗?
我将不胜感激任何意见!
感谢您的帮助,新陈代谢
我正在使用此代码将文件上传到 Azure blob 存储,container我的 CloudBlobContainer 在哪里
public void SaveFile(string blobPath, Stream stream)
{
stream.Seek(0, SeekOrigin.Begin);
CloudBlockBlob blockBlob = container.GetBlockBlobReference(virtualPath);
blockBlob.Properties.ContentDisposition =
"attachment; filename=" + Path.GetFileName(virtualPath);
blockBlob.UploadFromStream(stream);
}
Run Code Online (Sandbox Code Playgroud)
然后,当用户单击网页中的文件时,我尝试触发下载,提示他们保存/打开文件。我通过调用一个返回到 blob URL 的重定向的 Action 来完成此操作。
public ActionResult LoadFile(string path)
{
string url = StorageManager.GetBlobUrlFromName(path);
return Redirect(url);
}
Run Code Online (Sandbox Code Playgroud)
问题是这将在浏览器中打开文件,例如,当我希望用户留在我的页面上但开始下载文件时,用户将被重定向离开我的网站并在浏览器中显示 .jpg 文件。
我们已将图像上传到具有公共访问权限的 Azure Blob 存储中,并在我们的 Asp.Net MVC 应用程序中以以下语法显示它们:
<img src="https://xxxxx.blob.core.windows.net/image.png"/>
Run Code Online (Sandbox Code Playgroud)
然而,这是一个安全漏洞。因为未经授权的用户也可以轻松地从浏览器访问所有图像。这就是为什么我们尝试对图像使用共享访问签名 Url。但我有一些问题;
我们是否应该为每个过期时间较短的请求生成这个 url?,也许用户每次刷新同一页面 5 次,我们应该每次生成不同的 url,这不是性能问题吗?,
或者,
我们应该生成这个长过期时间的url吗?但是在这种情况下,我如何在过期时间后刷新令牌?我如何理解令牌不再有效?并且在长过期时间下,未经授权的用户仍然可以访问图像用这个网址?,
我们在项目中使用 azure blob 存储,并将 JSON 字符串存储在 blob 容器中。出于某种目的,我们解析此 JSON 字符串以将其分解为行和列,然后显示在 UI 上的网格控件中。网格控制在客户端提供过滤、分组等功能。然而,当数据很大时,此类操作需要时间,因此 UI 变得无响应。因此,现在我们希望在服务器上执行此类操作,以便网格更快地加载来自服务器的相关数据,而不是所有行。
为此,我们认为我们需要查询 JSON 数据以进行过滤、分组、分页等,但不确定 blob 存储或任何其他云存储机制( DocumentDB )是否提供此类功能。我们可以选择使用 PostgreSQL,但我们希望主要坚持基于云的基础设施。
关于如何在 AZURE 上并使用 azure 存储(不是 Azure SQL,而是表存储、blob 存储等成本较低)查询 JSON 数据的任何想法
我正在尝试对一个将文件上传到 Azure Blob 存储的类进行单元测试。上传方法作为CloudBlobContainer输入。调用时_storageContainer.Object.GetBlockBlobReference(),会引发 System.NullReferenceException。谁能帮我嘲笑这个?
单元测试代码:
[TestClass()]
public class BlobStorageServiceUploadUnitTest
{
private static BlobStorageService _service;
private static Mock<CloudBlobContainer> _storageContainer;
private static List<FileType> _extensions;
private static int _maxSize;
[ClassInitialize]
public static void Setup_Service(TestContext context)
{
_extensions = new List<FileType> { FileType.Image };
_maxSize = 2048;
_storageContainer = new Mock<CloudBlobContainer>();
_service = new BlobStorageService(new Mock<BEntitiesContainer>().Object, _storageContainer.Object);
}
[TestMethod()]
public void When_FileIsDeleted()
{
var file = CreateMockFile("test.jpg", 500000);
var blob = _storageContainer.Object.GetBlockBlobReference("deleteTest.jpg");
blob.UploadFromStream(file.Object.InputStream);
_service.DeleteFromStorage("deleteTest.jpg");
var blobs = _storageContainer.Object.ListBlobs();
Assert.AreEqual(0, …Run Code Online (Sandbox Code Playgroud) 我使用 Azure SAS URL 将文件上传到 Blob 存储:
var blockBlob = new Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob(new System.Uri(sasUrl));
blockBlob.UploadFromFile(filePath);
Run Code Online (Sandbox Code Playgroud)
该文件存在于我的磁盘上,并且 URL 应该是正确的,因为它是从 Windows Store Ingestion API 自动检索的(并且,如果我稍微更改 URL 签名部分中的一个字符,上传会失败并显示 HTTP 403)。
然而,在检查时
var blobs = blockBlob.Container.ListBlobs();
Run Code Online (Sandbox Code Playgroud)
结果是Count = 0,所以我想知道是否上传成功?不幸的是,该UploadFromFile方法(与该UploadFromStream方法类似)没有返回类型,因此我不确定如何检索上传的结果)。
如果我尝试使用Azure 存储资源管理器连接到 SAS URL ,则列出 Blob 容器会失败,并显示错误“身份验证错误。签名字段格式不正确”。我尝试使用 URL 转义 URL 的签名部分,因为这似乎是在某些类似情况下出现该错误的原因,但这并不能解决问题。
有什么方法可以检查 blob 上传的状态吗?有人知道为什么无法使用 Azure 资源管理器连接自动生成的 URL(由 Microsoft 的官方 API 之一提供)吗?
Azure Blob 存储是否支持用于引用位置或文件的别名?
我有 Azure 订阅,想知道 Blob 存储在引用位置或文件时是否支持别名
如果文件像这样可用 - /storage/container/folderA/fileA
我想做这样的事情 -/foo/pointertofileA
如果我访问上面的网址,这仍然允许我检索文件
根据详细介绍 Azure 存储限制的这篇文章,可以发出的 Azure 资源管理器请求的数量是有限制的。
此外,本文详细介绍了 ARM API 的限制。此处的一篇帖子声称他们在发出过多请求后遇到了运行列表操作的问题。
我的问题是,每小时为 blob 存储生成的 SAS 密钥数量是否有限制?创建 SAS 密钥是 ARM 事件吗?
例如,如果我使用 Python Azure 存储 SDK 并尝试在一小时内为各种 blob(存储帐户中容器中的文件)创建 160,000 个 SAS 密钥,我会受到限制还是停止?
我的应用程序依赖这些密钥来允许微服务访问受保护的数据,但是如果我无法在短时间内创建大量 SAS 密钥,我将无法扩展此应用程序。
azure azure-storage azure-resource-manager azure-blob-storage azure-sdk