C# 直接从流异步上载到azure
我想使用流直接上传到我的azure本地开发帐户。我已经为azure blob存储创建了一个类C# 直接从流异步上载到azure,c#,azure,C#,Azure,我想使用流直接上传到我的azure本地开发帐户。我已经为azure blob存储创建了一个类 public class AzureBlob { delegate void UploadFinished(IAsyncResult result); public void uploadFile() { //Initial configuration CloudStorage account = CloudStorageAccount.Devel
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();
}
}
公共类AzureBlob
{
委托无效上载完成(IAsyncResult结果);
public void uploadFile()
{
//初始配置
CloudStorage account=CloudStorageAccount.DevelopmentStorageAccount;
CloudBlobClient=account.CreateBlobClient();
CloudBlobContainer container=client.GetContainerReference(“myfiles”);
Stream=新的MemoryStream();
//上传到azure
CloudBlob blob=container.GetBlobReference(“sample.txt”);
UploadFinished UploadFinished=委托(IAsyncResult结果)
{
WriteLine(“上传完成{0}{1}”,result.IsCompleted,stream.Position);
};
BeginUploadFromStream(stream,newasyncCallback(uploadFinished));
//写入流
对于(inti=0;i,在我看来,您有一个竞争条件。您在实际将内容放入流之前就开始上载流
你可能想要这样的东西:
Stream stream = new MemoryStream();
//Write to stream
for(int i=0;i<100;i++)
{
for(int j=0;j<50;j++)
{
stream.WriteByte(65);
}
}
stream.SetPosition(0); // <-- need to reset stream position to 0 before uploading
//Upload to azure
CloudBlob blob = container.GetBlobReference("sample.txt");
UploadFinished uploadFinished = delegate(IAsyncResult result)
{
blob.EndUploadFromStream(result); // <-- have to call this in your handler
Console.WriteLine("Upload finished {0} {1}", result.IsCompleted, stream.Position);
};
blob.BeginUploadFromStream(stream, new AsyncCallback(uploadFinished));
Stream=newmemoryStream();
//写入流
对于(inti=0;i,在我看来,您有一个竞争条件。您在实际将内容放入流之前就开始上载流
你可能想要这样的东西:
Stream stream = new MemoryStream();
//Write to stream
for(int i=0;i<100;i++)
{
for(int j=0;j<50;j++)
{
stream.WriteByte(65);
}
}
stream.SetPosition(0); // <-- need to reset stream position to 0 before uploading
//Upload to azure
CloudBlob blob = container.GetBlobReference("sample.txt");
UploadFinished uploadFinished = delegate(IAsyncResult result)
{
blob.EndUploadFromStream(result); // <-- have to call this in your handler
Console.WriteLine("Upload finished {0} {1}", result.IsCompleted, stream.Position);
};
blob.BeginUploadFromStream(stream, new AsyncCallback(uploadFinished));
Stream=newmemoryStream();
//写入流
对于(inti=0;i来自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();
}
委托无效开始执行完成(IAsyncResult结果);
public void UploadFile()
{
//初始配置
var account=CloudStorageAccount.DevelopmentStorageAccount;
var client=account.CreateCloudBlobClient();
var container=client.GetContainerReference(“myfiles”);
Stream=新的MemoryStream();
var state=新对象{};
//上传到azure
var blob=container.GetBlobReference(“test.txt”);
BeginUploadFinished BeginUploadFinished=委托(IAsyncResult结果)
{
blob.EndUploadFromStream(结果);
Trace.WriteLine(“EndUploadFromStream”,“Information”);
stream.Close();
stream.Dispose();
};
//写入流
Trace.WriteLine(“写入流”、“信息”);
对于(变量i=0;i<100;i++)
{
对于(var j=0;j<50;j++)
{
stream.WriteByte(65);
}
}
stream.Seek(0,SeekOrigin.Begin);
Trace.WriteLine(“BeginUploadFromStream”、“Information”);
var_result=blob.BeginUploadFromStream(流,新异步回调(beginUploadFinished),状态);
_result.AsyncWaitHandle.WaitOne();
}
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();
}
委托无效开始执行完成(IAsyncResult结果);
public void UploadFile()
{
//初始配置
var account=CloudStorageAccount.DevelopmentStorageAccount;
var client=account.CreateCloudBlobClient();
var container=client.GetContainerReference(“myfiles”);
Stream=新的MemoryStream();
var state=新对象{};
//上传到azure
var blob=container.GetBlobReference(“test.txt”);
BeginUploadFinished BeginUploadFinished=委托(IAsyncResult结果)
{
blob.EndUploadFromStream(结果);
Trace.WriteLine(“EndUploadFromStream”,“Information”);
stream.Close();
stream.Dispose();
};
//写入流
Trace.WriteLine(“写入流”、“信息”);
对于(变量i=0;i<100;i++)
{
对于(var j=0;j<50;j++)
{
stream.WriteByte(65);
}
}
stream.Seek(0,SeekOrigin.Begin);
Trace.WriteLine(“BeginUploadFromStream”、“Information”);
var_result=blob.BeginUploadFromStream(流,新异步回调(beginUploadFinished),状态);
_result.AsyncWaitHandle.WaitOne();
}