ストリーム経由でcloudBlobからファイルをダウンロードしようとしています。私はここでCloudBlobCloudBlob.DownloadToStreamがnullを返します
が
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();
}
}
に変換しかし、私は常にnull値を取得するためのコードブロブをダウンロードするためのコードで、この記事を参照してください。以下はストリームファイルの内容です。
はこれで何が間違っているのですか?助けてください。 ReadFully
メソッド内で0に位置の設定
EDIT
が許可されていないので、私は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;
}
あなたが「入力」オブジェクトを使用する必要があります、しかし、あなたは確認のreadFully @ 0に位置を設定することができますようあなたの部分にいくつかの誤解があります。 Object memはDownloadBlobAsStream()内にローカルスコープを持っています。なぜなら、mem.Positionを設定する必要があるのは、この関数で行う必要がありますが、ReadFully()を呼び出して "Stream"オブジェクトを渡すとき、Positionを0まあ、私は私の投稿に示したように。両方とも受け入れられ、うまくいくでしょう。 – AvkashChauhan
ReadFullyの中にPosition = 0を設定すると、「サポートされていません」というエラーがスローされ、入力プロパティを調べようとすると、CanSeek = falseと表示されますが、 :) – fiberOptics
ちょうど明確にするには、null値または空のバイト配列を取得していますか?私はnull値を見たことはありませんが、私のテストでは何もストリームの位置を変更せずに空のバイト配列を見てきました。 – kendaleiv