2010-01-26 23 views
5

tôi đang sử dụng WebClient để upload dữ liệu sử dụng async cuộc gọi đến một máy chủ,WebClient AsyncUpload tỷ lệ phần trăm tiến bộ luôn luôn trả 50%

WebClient webClient = new WebClient(); 
    webClient.UploadDataAsync(uri , "PUT", buffer, userToken); 

tôi đã gắn DatauploadProgress và DatauploadCompleted Sự kiện chức năng gọi lại thích hợp

 // Upload Date Progress 
     webClient.UploadProgressChanged += new 
     UploadProgressChangedEventHandler(UploadProgressCallback); 

     // Upload Date Progress 
    void UploadProgressCallback(object sender, UploadProgressChangedEventArgs e) 
    { 
     // Magic goes here 
    logger.writeToLog("Percentage =" + e.ProgressPercentage); 
    } 

các e.ProgressPercentage luôn luôn trả về 50 .. không có vấn đề gì kích thước của tập tin được tải lên là (đã thử kích thước khác nhau giữa 10kb đến 60mb). chức năng chính nó được gọi chỉ hai lần (thực sự nhanh quá) và tỷ lệ phần trăm cho thấy 50! ..nó là vô lý đặc biệt với các tệp lớn ...

e.BytesSent không giúp gì cả… nó luôn hiển thị kích thước tệp theo byte: S (ví dụ: nếu kích thước tệp là 63.000, tôi sẽ nhận được e.BytesSent = 63,000e.ProgressPercentage= 50

ai đó có thể chỉ là vấn đề ra cho tôi?

+0

UploadDataAsync có thực sự hỗ trợ phương pháp PUT không? – jayarjo

Trả lời

7

Nếu bạn muốn theo dõi sự tiến bộ của video tải lên, bạn sẽ cần phải sử dụng UploadFileAsync thay vì UploadData.

với UploadDataAsync bạn có nghĩa vụ phải tự chunk các tập tin và hiển thị tiến độ (ít nhất, đó là những gì tôi đã được xác định từ kinh nghiệm của riêng tôi trong vấn đề mặc dù tôi đã không nhìn thấy nó được viết như vậy trên MSDN).

Điều bạn đang tìm kiếm là sử dụng UploadFileAsync thay vào đó, điều này sẽ gọi sự kiện UploadProgressChanged chính xác. Sau đó bạn có thể xem sự kiện args các thuộc tính BytesSent và TotalBytesToSend sẽ được phản ánh chính xác.

Tôi giả định lý do đằng sau điều này là khi bạn đang gửi dữ liệu, bạn có thể lặp qua các luồng dữ liệu của mình và tăng theo dõi tiến trình theo cách thủ công trong khi với tệp bạn không thể (.NET sẽ quản lý toàn bộ toàn bộ tải lên cho bạn). Cá nhân, tôi cảm thấy có điều gì đó đáng sợ vì không có lý do gì cho sự kiện UploadProgressChanged được gọi với thông tin không hợp lệ trong trường hợp UploadDataAsync - hoặc được gọi với thông tin chính xác, hợp lệ hoặc hoàn toàn không được gọi.

Ở mọi mức độ, hãy cung cấp cho UploadFileAsync một ảnh và xem cách thực hiện.

+0

+1 dành thời gian của bạn để cung cấp câu trả lời chi tiết này, tôi sẽ kiểm tra nó và quay lại :) –

+1

Thx, kiểm tra nó, và nó giải quyết được vấn đề: S nhưng tôi thấy nó khá ngu ngốc và phi logic .. –

Các vấn đề liên quan