【发布时间】:2016-02-10 16:11:11
【问题描述】:
我正在使用 Xamarin PCL 创建适用于 Android 和 iOS 的文件上传应用程序,并且我已设法实现文件上传和某种进度条,但它无法正常工作。
我看到了一些关于显示下载进度的堆栈溢出的答案,但我想通知我的用户有关上传进度但没有找到任何解决方案。
这是我的代码:
public static async Task<string> PostFileAsync (Stream filestream, string filename, int filesize) {
var progress = new System.Net.Http.Handlers.ProgressMessageHandler ();
//Progress tracking
progress.HttpSendProgress += (object sender, System.Net.Http.Handlers.HttpProgressEventArgs e) => {
int progressPercentage = (int)(e.BytesTransferred*100/filesize);
//Raise an event that is used to update the UI
UploadProgressMade(sender, new System.Net.Http.Handlers.HttpProgressEventArgs(progressPercentage, null, e.BytesTransferred, null));
};
using (var client = HttpClientFactory.Create(progress)) {
using (var content = new MultipartFormDataContent ("------" + DateTime.Now.Ticks.ToString ("x"))) {
content.Add (new StreamContent (filestream), "Filedata", filename);
using (var message = await client.PostAsync ("http://MyUrl.example", content)) {
var result = await message.Content.ReadAsStringAsync ();
System.Diagnostics.Debug.WriteLine ("Upload done");
return result;
}
}
}
}
显示了某种进度,但是当进度达到 100% 时,文件还没有上传。在我收到最后一条进度消息后的一段时间内,也会打印消息“上传完成”。
也许进度是显示从设备发出的字节,而不是尚未上传的字节,所以当它说,它是 100% 时,所有字节都刚刚发出,但还没有被服务器接收?
编辑:尝试了这个解决方案:https://forums.xamarin.com/discussion/56716/plans-to-add-webclient-to-pcl,效果更好。
【问题讨论】:
标签: c# file-upload xamarin httpclient progress