fib*_*ics 12 c# cloud blob azure azure-storage
我正在尝试通过流从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;
}
Run Code Online (Sandbox Code Playgroud)
并将代码转换为字节数组
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();
}
}
Run Code Online (Sandbox Code Playgroud)
但我总是得到零价值.以下是流式文件的内容.
这有什么问题?请帮忙.
编辑
ReadFully不允许在Position 方法中将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;
}
Run Code Online (Sandbox Code Playgroud)
Avk*_*han 13
你的问题是你的输入流指针被设置为蒸汽结束(参见屏幕截图,长度和位置都显示相同的值)这就是为什么当你读它时你总是得到null.您需要设置为使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
如何在CloudBlob对象上使用OpenRead()方法?
public static string ReadFully(string blobUri, string itemUri)
{
// e.g. itemUri == "foo.txt"
// if there is a folder "bar" with foo.txt, provide instead: "bar/foo.txt"
CloudBlobContainer cloudBlobContainer = new CloudBlobContainer(new Uri(blobUri));
CloudBlob blobReference = cloudBlobContainer.GetBlobReference(itemUri);
using (var stream = blobReference.OpenRead())
{
using (StreamReader reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
}
Run Code Online (Sandbox Code Playgroud)