我有一个班级
public class TextCorpusFile
{
public int Id {get; set;}
public string FileType {get; set;}
public MemoryStream File {get; set;}
}
如果我尝试将文件上传到Azure Blob存储,则文件长度等于0.(文件已创建,但长度为0)
public void SendTextCorpusFileData(TextCorpusFile textCorpusFile)
{
//get container by default
CloudBlobContainer textCorpusContainer =
ReturnTextCorpusFileContainer();
CloudBlockBlob blockBlob = textCorpusContainer.GetBlockBlobReference(textCorpusFile.Id + POINT + textCorpusFile.FileType);
blockBlob.UploadFromStream(textCorpusFile.File);
}
但是如果我按字节发送文件,它运行良好,长度不是0.
public void SendTextCorpusFileData(TextCorpusFile textCorpusFile)
{
//get by default
CloudBlobContainer textCorpusContainer =
ReturnTextCorpusFileContainer();
CloudBlockBlob blockBlob = textCorpusContainer.GetBlockBlobReference(textCorpusFile.Id + POINT + textCorpusFile.FileType);
blockBlob.UploadFromByteArray(textCorpusFile.File.ToArray(),
0,
(int)textCorpusFile.File.Length);
}
为什么它的工作原理我无法理解(因为UploadFromStream(Stream源码,我确信 MemoryStream:Stream )
你能解释一下吗?
答案 0 :(得分:8)
虽然没有显示任何相关代码,但我确诊:MemoryStream.Position
已结束。这会导致读取返回0
个字节。
答案 1 :(得分:0)
我遇到了同样的问题,在调用UploadFromStream之前将内存流的位置设置为0.