- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Azure 开发 Blob 存储..
上传 Blob 效果非常好,我可以在 Visual Studio Blob 容器 View 中双击上传的图像并打开图片...
但是如果你看看这张图片:
...Uri 有问题吗?
这是我正在使用的代码:
public MemoryStream DownloadBlob(int id)
{
Photo photo = PhotoServices.GetPhotoById(id);
var cloudBlobContainer = _blobClient.GetContainerReference(CurrentBlobContainerName);
var blob = cloudBlobContainer.GetBlockBlobReference(photo.BlobUrl);
var memorystream = new MemoryStream();
// THIS LINE GIVES BLOB NOT FOUND EXCEPTION
blob.DownloadToStream(memorystream);
memorystream.Position = 0;
return memorystream;
这是我存储 Blob 的方法:
public CloudBlockBlob UploadBlob(Stream fileStream, string fileName)
{
var blobName = Guid.NewGuid() + fileName;
var blockBlob = GetContainer().GetBlockBlobReference(blobName);
blockBlob.UploadFromStream(fileStream);
return blockBlob;
}
这是我获取 Blob 的方法:
public MemoryStream DownloadBlob(int id)
{
Photo photo = PhotoServices.GetPhotoById(id);
var cloudBlobContainer = _blobClient.GetContainerReference(CurrentBlobContainerName);
var blob = cloudBlobContainer.GetBlockBlobReference(photo.BlobUrl);
var memorystream = new MemoryStream();
memorystream.Position = 0;
blob.DownloadToStream(memorystream);
return memorystream;
}
这是 blob 在开发中的样子。存储(可以点击并从那里查看)
Name : bla-bla-bla.jpg
Content Type : application/octet-stream
URL : http://127.0.0.1:10000/devstoreaccount1/userid1/bla-bla-bla.jpg
那么...我应该如何改变获取图片的方式来获取正常的 URL ?
Soo..有什么明显的事情是我做错了吗?
这里是完整的 NET 响应消息:
{"$id":"1","Message":"An error has occurred.","ExceptionMessage":"The remote server returned an error: (404) Not Found.","ExceptionType":"Microsoft.WindowsAzure.Storage.StorageException","StackTrace":" at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext)\r\n at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.DownloadRangeToStream(Stream target, Nullable`1 offset, Nullable`1 length, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext)\r\n at Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob.DownloadToStream(Stream target, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext)\r\n at ServiceLibrary.Services.StorageServices.DownloadBlob(Int32 id) in c:\\PhotoApp\\ServiceLibrary\\Services\\StorageServices.cs:line 116\r\n at PhotoWebApp.Controllers.PhotoSubmitController.GetPhotoById(Int32 id) in c:\\PhotoApp\\PhotoWebApp\\Controllers\\PhotoSubmitController.cs:line 28\r\n at lambda_method(Closure , Object , Object[] )\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass10.<GetExecutor>b__9(Object instance, Object[] methodParameters)\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)\r\n at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ExecuteAsync(HttpControllerContext controllerContext, IDictionary`2 arguments, CancellationToken cancellationToken)\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()","InnerException":{"$id":"2","Message":"An error has occurred.","ExceptionMessage":"The remote server returned an error: (404) Not Found.","ExceptionType":"System.Net.WebException","StackTrace":" at System.Net.HttpWebRequest.GetResponse()\r\n at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.ExecuteSync[T](RESTCommand`1 cmd, IRetryPolicy policy, OperationContext operationContext)"}}
最佳答案
您似乎将 blob 的绝对 URL 存储在应用程序的 BlobUrl
属性中。基于 CloudBlobContainer.GetBlockBlobReference
的文档,它应该是blob的名称
。因此,在您的情况下,它应该只是图像文件的名称。
如果您仔细查看您共享的屏幕截图,尤其是 blob 的 URI 属性,您会注意到这个问题。 Blob 的 Uri 属性是 http://127.0.0.1:10000/devstoreaccount1/userid1/http://127.0.0.1:10000/devstoreaccount1/userid1/85066...mongo.jpg
而不是 http://127.0.0.1:10000/devstoreaccount1/userid1/85066...mongo.jpg
.
关于c# - Azure CloudBlockBlob。 DownloadToStream 时找不到 blob。 Uri 似乎重复了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24986336/
我正在尝试将多个 CloudBlockBlob 对象连接到 Azure 函数内的单个 CloudBlockBlob 对象中。我尝试将多个对象下载到内存流中,然后将内存流上传到新对象,但该函数在操作完成
我可能在这里做了一些非常明显错误的事情。我正在 Microsoft.WindowsAzure.Storage 中查找 UploadFromStream()、UploadFromFile()。我只能找到
我们有一个文件系统抽象,使我们能够轻松地在本地和云(Azure)存储之间切换。 对于读取和写入文件,我们有以下成员: Stream OpenRead(); Stream OpenWrite(); 我们
如果 blob 已存在,CloudBlockBlob.UploadText 的行为是什么?它会附加到现有的 blob 中吗?或者抛出异常? 最佳答案 如果您对现有 Blob 调用 CloudBlock
我只是想知道,例如,如果我有一个只有 2MB 的文件。它会使用整个 4MB block 还是只使用 2MB? 我上传了一张33MB的图片到stroage,它被分成4MB的 block 吗? 谢谢 最佳
我使用 azure blob 存储来存储 JSON 文件,并在我的代码中使用 C# API 下载它。 当我下载文本文件的内容并尝试使用 JsonConvert 对其进行反序列化时,出现错误(Visua
我正在尝试对 Azure CloudBlockBlob 进行 Moq 并让它返回一个 Stream 以便我可以测试我的 BlobStorage 存储库是否正在处理正确输出。 但不知何故返回的流总是空的
我正在尝试根据存储帐户中公共(public) blob 的元数据创建 VideoBlob 对象(标题、描述、路径)列表。问题是,当我尝试让变量等于 blob 的元数据(“标题”位于 blob 的元数据
我正在为我拥有的 Web API Web 角色实现 Azure 角色内缓存。我希望能够缓存不经常更改的特定 blob 的 BlobReference。这是我用来获取 BlobReference 的代码
有多种方法可以复制 Azure Blob 存储 block 。 StartCopy 有同步和异步版本。还有一个 BeginStartCopy,它也具有完成回调。 BeginStartCopy 方法明确
我正在使用 CloudBlockBlob 对象和 UploadFromFileAsync 方法将文件上传到 Blob 存储。完成后,我将想要调用一项服务,然后该服务告诉多台计算机获取我上传的文件。但是
我正在使用 CloudBlockBlob 对象和 UploadFromFileAsync 方法将文件上传到 Blob 存储。完成后,我将想要调用一项服务,然后该服务告诉多台计算机获取我上传的文件。但是
我有以下代码: public static void UploadStreamToBlob(Stream stream, string containerName, string blobName)
如果您要转移 Stream通过官方 CloudBlockBlob 到 Azure Blob Storage类,如何监控上传/下载本身的进度?我期待该类会发生一些事件,因为它是一个网络 IO 类,但似乎
我一定在这里遗漏了一些明显的东西,但我发现自己无法进行我认为合法的向上转换。我正在尝试将数据上传到 Azure 中的 Blob 存储,并且想使用方法 CloudBlob.UploadText(stri
我目前使用以下方式上传 CloudBlockBlob: CloudBlockBlob.UploadFromStreamAsync 然后我立即在上面设置了一堆用户元数据。 问题是:我有一个事件网格事件,
我希望这个问题的答案很简单,但在查看 Azure Java API 文档后我无法让它工作。 我正在尝试创建一个空的 CloudBlockBlob,稍后会将 block 上传到其中。我之前已经成功上传了
尝试使用 ASP.NET azure SDK 从 Blob 存储下载图像。 我在另一篇文章中读到,DownloadToStream 确实将 blob 分解成更小的 block 并并行下载它们以提高性能
我正在将文件从 Azure 文件共享复制到存储容器中的 CloudBlockBlob。我想在删除原始文件之前验证两个位置的字节(.Properties.Length)是否相同。我认为这将是获得对复制的
下面的代码示例偶尔会导致访问冲突(5,000 到 10,000 条消息中的 1 条)。使用串行 foreach 而不是 Parallel.ForEach 似乎可以规避该问题。 public void
我是一名优秀的程序员,十分优秀!