我的代码应该从用户计算机上传一个zip文件到服务器,并在上传时更新进度条 . 它成功上传了zip文件,然而,网页一直等到它完成 . 只有在完成后才会进行一次更新以说明其完整 . 它似乎在更新之前传递了所有数据字节 . 我会使用 UploadFileAsync()
,但是,它不能使用 FileUpload.PostedFile.FileName
当我通过将PostedFile发送到 byte[]
上传字节并使用 UploadDataAsync()
它正常工作 .
这是在线程中开始上传的代码: (THIS UPLOADS TO THE SERVER CORRECTLY WITHOUT PROGRESS)
byte[] bbb = fileMiscUploadPath.FileBytes;
WebClient client = new WebClient();
Thread thread = new Thread(() =>
{
client.UploadProgressChanged += new UploadProgressChangedEventHandler(client_UploadProgressChanged);
client.UploadDataCompleted += new UploadDataCompletedEventHandler(client_UploadFileCompleted);
client.UploadDataAsync(new Uri(UploadLocation), bbb);
});
thread.Name = "AAAUpload";
thread.Start();
我甚至尝试使用 UploadFileAsync()
方法,它可以在我的本地计算机上运行但是当我将它发布到服务器然后尝试上传文件时它不起作用 . 这是UploadFileAsync()的版本: (THIS FAILS TO UPLOAD AT ALL ON THE SERVER, HOWEVER IT DOES UPLOAD WITH A PROGRESS BAR WHEN RUNNING LOCALY)
WebClient client = new WebClient();
Thread thread = new Thread(() =>
{
client.UploadProgressChanged += new UploadProgressChangedEventHandler(client_UploadProgressChanged);
client.UploadFileCompleted += new UploadFileCompletedEventHandler(client_UploadFileCompleted);
client.UploadFileAsync(new Uri(UploadLocation), fileMiscUploadPath.PostedFile.FileName.ToString());
});
thread.Name = "AAAUpload";
thread.IsBackground = true;
thread.Start();
这是clent_UploadProgressChanged函数:
void client_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
{
byteHasBeenUploaded = true;
try
{
double bytesIn = double.Parse(e.BytesSent.ToString());
double totalBytes = double.Parse(e.TotalBytesToSend.ToString());
double percentage = bytesIn / totalBytes * 100;
UploadPercent = int.Parse(Math.Truncate(percentage).ToString());
}
catch (Exception err)
{
UploadPercent = 999;
}
}
它确实击中了该方法,然而,它只在完成时发生一次 . 有没有办法在使用 UploadDataAsync()
时更改缓冲区?如何分解字节以便多次触发 UploadProgressChanged()
方法?
使用 UploadDataAsync()
运行时,这些是 UploadProgressChangedArgs
的值: