Vâng, giải pháp của bạn gần như hoạt động. Có một vài điều cần đưa vào tài khoản để giữ cho nó đơn giản:
Hủy bỏ điều hướng mặc định chỉ cho các URL cụ thể mà bạn biết một download sẽ xảy ra, hoặc người dùng sẽ không thể để di chuyển bất cứ nơi nào. Điều này có nghĩa là bạn không thay đổi URL tải xuống trang web của mình.
DownloadFileAsync
không biết tên được máy chủ báo cáo trong tiêu đề Content-Disposition
để bạn phải chỉ định một hoặc tính toán một từ URL gốc nếu có thể. Bạn không thể chỉ định thư mục và mong muốn tên tệp sẽ được truy xuất tự động.
Bạn phải xử lý lỗi máy chủ tải xuống từ cuộc gọi lại DownloadCompleted
vì kiểm soát trình duyệt web sẽ không làm điều đó cho bạn nữa.
mẫu đoạn mã, mà sẽ tải về vào thư mục quy định tại textBox1
, nhưng với một tên tập tin ngẫu nhiên, và không có bất kỳ xử lý lỗi thêm:
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) {
/* change this to match your URL. For example, if the URL always is something like "getfile.php?file=xxx", try e.Url.ToString().Contains("getfile.php?") */
if (e.Url.ToString().EndsWith(".zip")) {
e.Cancel = true;
string filePath = Path.Combine(textBox1.Text, Path.GetRandomFileName());
var client = new WebClient();
client.DownloadFileCompleted += client_DownloadFileCompleted;
client.DownloadFileAsync(e.Url, filePath);
}
}
private void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) {
MessageBox.Show("File downloaded");
}
Giải pháp này nên làm việc nhưng có thể bị hỏng rất dễ dàng. Hãy thử xem xét một số dịch vụ web liệt kê các tệp sẵn có để tải xuống và tạo giao diện người dùng tùy chỉnh cho nó. Nó sẽ đơn giản hơn và bạn sẽ kiểm soát toàn bộ quá trình.
Nguồn
2011-07-24 12:49:54
phần bài viết có liên quan của mã của bạn ở đây, trực tiếp trong câu hỏi. Không sử dụng các liên kết bên ngoài. –
@Anders Abel, Đã sửa lỗi! –
Bạn có đang cố gắng ghi đè việc triển khai giao diện người dùng tệp của trình duyệt không? Sẽ dễ dàng hơn nhiều nếu bạn ghi tệp vào luồng và chỉ định trong loại nội dung là tệp ... Ngoài ra nếu tôi nhớ chính xác bạn không có quyền truy cập vào hệ thống tệp của khách hàng ur ... u không thể tải tệp xuống đường dẫn trên máy khách do đó lấy nó như là một đầu vào không phải là sử dụng bất kỳ .. – Mulki