C# 使用BackgroundUploader将视频文件上载到服务器
我正在创建面向Windows 8.0的Windows应用商店应用程序 我的电脑上安装了Windows 8.1预览版,我使用VS2012创建了应用程序,并使用以下代码和方法将文件上载到服务器-C# 使用BackgroundUploader将视频文件上载到服务器,c#,windows-8,upload,windows-store-apps,background-transfer,C#,Windows 8,Upload,Windows Store Apps,Background Transfer,我正在创建面向Windows 8.0的Windows应用商店应用程序 我的电脑上安装了Windows 8.1预览版,我使用VS2012创建了应用程序,并使用以下代码和方法将文件上载到服务器- string url = //url to upload videostring boundray = string.Format("abcboundry"); String header = string.Format("--{0}\r\nContent-Disposition: form-data; n
string url = //url to upload videostring boundray = string.Format("abcboundry");
String header = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"{1}\"; filename=\"{2}\"\r\n" + "Content-Type: {3}\r\n\r\n", boundray, "file", source.Name, "application/octet-stream");
string footer = string.Format("\r\n--{0}--\r\n", boundray);
Stream headerStream = GenerateStreamFromString(header);
Stream footerStream = GenerateStreamFromString(footer);
//Stream dataStream = iRandomstream.AsStream();
Stream dataStream = await source.OpenStreamForReadAsync();
MemoryStream fileDataStream = new MemoryStream();
await headerStream.CopyToAsync(fileDataStream);
await dataStream.CopyToAsync(fileDataStream);
await footerStream.CopyToAsync(fileDataStream);
fileDataStream.Position = 0;
IInputStream stream = fileDataStream.AsInputStream();
BackgroundUploader backgroundUploader = new BackgroundUploader();
backgroundUploader.SetRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundray);
backgroundUploader.Method = "POST";
UploadOperation uploadOpration = await backgroundUploader.CreateUploadFromStreamAsync(new Uri(url), stream);
await HandleUploadAsync(uploadOpration, true);
它对我来说工作正常,但当在安装了Windows 8.0的其他系统上进行测试时,由于AccessViolationException而导致应用程序崩溃,该测试未得到处理。试图读取或写入受保护的内存。这通常表示其他内存已损坏。”在InitializeComponent.error处
现在,我尝试implement进行多部分上传,但这段代码没有成功-
List<BackgroundTransferContentPart> parts = new List<BackgroundTransferContentPart>();
BackgroundTransferContentPart part = new BackgroundTransferContentPart("file", source.Name);
part.SetHeader("Content-Type", "application/octet-stream");
part.SetFile(source);
parts.Add(part);
BackgroundUploader uploader = new BackgroundUploader();
uploader.Method = "POST";
UploadOperation uploadOp = await uploader.CreateUploadAsync(new Uri(url), parts, "form-data",boundray);
await HandleUploadAsync(uploadOp, true);
List parts=new List();
BackgroundTransferContentPart=新的BackgroundTransferContentPart(“文件”,source.Name);
SetHeader部分(“内容类型”、“应用程序/八位字节流”);
SetFile部分(源文件);
部分。添加(部分);
BackgroundUploader uploader=新的BackgroundUploader();
uploader.Method=“POST”;
UploadOperation uploadOp=Wait uploader.CreateUploadAsync(新Uri(url),部分,“表单数据”,boundray);
等待HandleUploadAsync(上传,true);
我能做些什么来解决我的问题
如何将大文件上载到服务器?您是否尝试过使用WinRT流来代替
System.Net.MemoryStream
,请尝试。您可以使用RandomAccessStream.CopySync()
来填充它。您是否尝试过使用WinRT流来代替System.Net.MemoryStream
,尝试一下。您可以使用RandomAccessStream.CopySync()
来填充它。我解决了我的问题
StorageFile VideoFileStream = await ApplicationData.Current.LocalFolder.CreateFileAsync("tempStream", CreationCollisionOption.OpenIfExists);
var fs2 = await VideoFileStream.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
IInputStream aaaa= fs2.GetInputStreamAt(0);
BackgroundUploader backgroundUploader = new BackgroundUploader();
backgroundUploader.SetRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundray);
backgroundUploader.Method = "POST";
UploadOperation uploadOpration = await backgroundUploader.CreateUploadFromStreamAsync(new Uri(url),aaaa);
await HandleUploadAsync(uploadOpration, true);
StorageFile VideoFileStream = await ApplicationData.Current.LocalFolder.CreateFileAsync("tempStream", CreationCollisionOption.OpenIfExists);
var fs2 = await VideoFileStream.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite);
IInputStream aaaa= fs2.GetInputStreamAt(0);
BackgroundUploader backgroundUploader = new BackgroundUploader();
backgroundUploader.SetRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundray);
backgroundUploader.Method = "POST";
UploadOperation uploadOpration = await backgroundUploader.CreateUploadFromStreamAsync(new Uri(url),aaaa);
await HandleUploadAsync(uploadOpration, true);
当它在8.0中运行时,使用远程调试器和测试从8.1对其进行调试,并查看失败点。我知道这是UploadOperation UploadOperation=Wait backgroundUploader.CreateUploadFromStreamAsync(新Uri(url),stream);在8.0中创建Access voilation的行在8.0中运行时,使用远程调试器和测试从8.1对其进行调试,并查看失败点。我知道这是UploadOperation UploadOperation=Wait backgroundUploader.CreateUploadFromStreamAsync(新Uri(url),stream);在8.0中创建Access voilation的行是的,我刚刚创建了-InMemoryRandomAccessStream iras=new InMemoryRandomAccessStream();并通过wait iras.WriteAsync(headerBuffer);方法在对象中写入数据\n headerbuffer->video buffer->footerBuffer它现在没有抛出AccessMemoryFoilation异常,但上载没有成功。是的,我刚刚做到了-InMemoryRandomAccessStream iras=new InMemoryRandomAccessStream();通过等待iras.WriteAsync(headerbuffer);方法在对象中写入数据\n headerbuffer->video buffer->footerbufferIts现在未引发AccessMemoryFoilation异常,但上载未成功。