- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试通过流从 cloudBlob 下载文件。我引用这篇文章CloudBlob
这是下载 blob 的代码
public Stream DownloadBlobAsStream(CloudStorageAccount account, string blobUri)
{
Stream mem = new MemoryStream();
CloudBlobClient blobclient = account.CreateCloudBlobClient();
CloudBlockBlob blob = blobclient.GetBlockBlobReference(blobUri);
if (blob != null)
blob.DownloadToStream(mem);
return mem;
}
以及将其转换为字节数组的代码
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[16 * 1024];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
但我总是得到空值。以下是流式文件的内容。
这有什么问题吗?请帮忙。
编辑
不允许在ReadFully
方法中将Position设置为0,因此我将其放在DownloadBlobAsStream
中
现在应该可以工作了:
public Stream DownloadBlobAsStream(CloudStorageAccount account, string blobUri)
{
Stream mem = new MemoryStream();
CloudBlobClient blobclient = account.CreateCloudBlobClient();
CloudBlockBlob blob = blobclient.GetBlockBlobReference(blobUri);
if (blob != null)
blob.DownloadToStream(mem);
mem.Position = 0;
return mem;
}
最佳答案
您的问题是您的输入流指针设置为 Steam 的末尾(参见屏幕截图,长度和位置都显示相同的值),这就是为什么当您读取它时您总是得到空值。您需要使用 Stream.Position = 0 将输入流指针设置为 0,如下所示:
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[16 * 1024];
input.Position = 0; // Add this line to set the input stream position to 0
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
关于c# - CloudBlob.DownloadToStream 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10891857/
这个问题已经有答案了: Differences between Azure Block Blob and Page Blob? (6 个回答) 已关闭 1 年前。 看起来像CloudBlob有 3 个
我使用 SQL Azure 来存储 Blob 元数据,并使用 Azure Blob 存储来存储实际的 Blob。 Blob 创建/删除是通过在环境 TransactionScope 中登记这些操作来实
任务 使用原始文件名将文件上传到 Azure Blob Storage,并将文件名作为 meta-data 分配给 CloudBlob 问题 元数据中不允许使用这些字符,但可以接受作为blob名称:
以下单元测试失败: [TestMethod] public void Add_file_to_blob_and_retrieve_it() { var blobName = Guid.NewG
使用 Windows Azure 存储客户端库,CloudBlob.OpenRead() 方法仅读取 4 mb 的数据。如何使用 OpenRead 方法读取完整流。 CloudBlob blob =
使用 Windows Azure 存储客户端库,CloudBlob.OpenRead() 方法仅读取 4 mb 的数据。如何使用 OpenRead 方法读取完整流。 CloudBlob blob =
我想将用户上传到我的网站的文件保存到我的 Azure Blob 中,并且我正在使用 CloudBlob.UploadFromStream 方法来执行此操作,但我想确保在做更多工作之前文件已顺利完成保存
我正在尝试从我的 Azure 存储帐户下载二进制文件。最初,我使用 CloudBlob.DownloadToFileAsync(),它允许我提供 IProgress 参数并获取传输进度更新。 但是,在
我一定在这里遗漏了一些明显的东西,但我发现自己无法进行我认为合法的向上转换。我正在尝试将数据上传到 Azure 中的 Blob 存储,并且想使用方法 CloudBlob.UploadText(stri
我正在尝试通过流从 cloudBlob 下载文件。我引用这篇文章CloudBlob 这是下载 blob 的代码 public Stream DownloadBlobAsStream(CloudStor
编辑:扩展代码示例以显示如何加载 destinationBlob。 我们正在利用直接帐户到帐户复制来传输一组 blob。由于属性在进程启动时会被覆盖,因此我们会定期监视目标 blob,然后在复制完成时
编辑:扩展代码示例以显示如何加载 destinationBlob。 我们正在利用直接帐户到帐户复制来传输一组 blob。由于属性在进程启动时会被覆盖,因此我们会定期监视目标 blob,然后在复制完成时
几个小时以来,我一直在尝试在使用 Azure SDK 创建的 blob 上设置一些元数据。我使用 BeginUploadFromStream() 异步上传数据,一切顺利。上传完成后,我可以使用 Blo
我正在尝试获取有关 Azure blob(上次修改的 UTC 日期时间)的一些信息。此信息存储在 CloudBlob.Properties.LastModifiedUtc 属性中。 如果我使用方法 G
我有以下代码,该代码使用已弃用的 Microsoft.WindowsAzure.StorageClient 并已升级到 Microsoft.WindowsAzure.Storage,现在我无法使用下面
我很确定这是 Windows Azure SDK 的限制(使用最新的 1.4),但必须有一种方法可以解决这个问题,而无需使用手动 REST... 代码: CloudBlob blob = contai
所以我一直在浏览https://learn.microsoft.com/en-us/learn/modules/copy-blobs-from-command-line-and-code/7-move
我想创建端点来传输存储在 azure CloudBlob 中的视频流。这是我的代码片段: public async Task GetVideo(string videoId) {
我似乎收到了 403: HTTP/1.1 403 Server failed to authenticate the request. Make sure the value of Authoriza
我似乎收到了 403: HTTP/1.1 403 Server failed to authenticate the request. Make sure the value of Authoriza
我是一名优秀的程序员,十分优秀!