作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用流直接上传到我的 azure 本地开发帐户。我已经为 azure blob 存储创建了一个类。
public class AzureBlob
{
delegate void UploadFinished(IAsyncResult result);
public void uploadFile()
{
//Initial configuration
CloudStorage account = CloudStorageAccount.DevelopmentStorageAccount;
CloudBlobClient client = account.CreateBlobClient();
CloudBlobContainer container = client.GetContainerReference("myfiles");
Stream stream = new MemoryStream();
//Upload to azure
CloudBlob blob = container.GetBlobReference("sample.txt");
UploadFinished uploadFinished = delegate(IAsyncResult result)
{
Console.WriteLine("Upload finished {0} {1}", result.IsCompleted, stream.Position);
};
blob.BeginUploadFromStream(stream, new AsyncCallback(uploadFinished));
//Write to stream
for(int i=0;i<100;i++)
{
for(int j=0;j<50;j++)
{
stream.WriteByte(65);
}
}
stream.Close();
}
}
我面临的第一个问题是我在存储中获取文件,但它不包含任何数据。即使我在回调中使用 EndOfUploadStream 方法(根据某些 stackoverflow 答案这是一个解决方案)。其次,我将断点放在回调中,我发现回调在我关闭流之前执行一次,并且程序不断更新流。此时流位置约为 913(大部分是随机的)。请帮助我直接通过流异步上传 blob。
最佳答案
smarx 的回答很好!另外,将stream.Close()移动到回调中。
delegate void BeginUploadFinished(IAsyncResult result);
public void UploadFile()
{
//Initial configuration
var account = CloudStorageAccount.DevelopmentStorageAccount;
var client = account.CreateCloudBlobClient();
var container = client.GetContainerReference("myfiles");
Stream stream = new MemoryStream();
var state = new Object{};
//Upload to azure
var blob = container.GetBlobReference("test.txt");
BeginUploadFinished beginUploadFinished = delegate(IAsyncResult result)
{
blob.EndUploadFromStream(result);
Trace.WriteLine("EndUploadFromStream", "Information");
stream.Close();
stream.Dispose();
};
//Write to stream
Trace.WriteLine("Writing Stream", "Information");
for (var i = 0; i < 100; i++)
{
for (var j = 0; j < 50; j++)
{
stream.WriteByte(65);
}
}
stream.Seek(0, SeekOrigin.Begin);
Trace.WriteLine("BeginUploadFromStream", "Information");
var _result = blob.BeginUploadFromStream(stream, new AsyncCallback(beginUploadFinished), state);
_result.AsyncWaitHandle.WaitOne();
}
关于c# - 直接从流异步上传到 azure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13891497/
我是一名优秀的程序员,十分优秀!