Tôi đang cố gắng tải tệp xuống từ máy chủ web và lưu tệp đó dưới tên tệp gốc mà máy chủ đang gửi cùng với tệp. Tải xuống hoạt động rất tốt, nhưng tôi không thể lấy tên tệp thực.Lấy tên tệp từ tệp tải xuống http
Ví dụ thực tế Tôi đang cố tải xuống this file (Trình đọc PDF của Foxit).
Nếu tôi đang sử dụng liên kết này trong trình duyệt như Chrome, trình duyệt tải xuống tệp có tên chính xác kể cả phiên bản, v.v. Tôi lấy tên này từ đâu? Tôi đã thử đọc thông tin tiêu đề và đang tìm kiếm Content-Disposition
nhưng máy chủ không gửi thông tin này. Tôi lấy tên chính xác từ đâu?
tôi đã cố gắng một cái gì đó như thế này:
try {
URL webfile = new URL("http://www.foxitsoftware.com/downloads/latest.php?product=Foxit-Reader");
URLConnection con = webfile.openConnection();
Map map = con.getHeaderFields();
Set set = map.entrySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
} catch (IOException ex) {
System.out.println("Error: "+ex.getMessage());
}
Như bạn có thể nhìn thấy trong đầu ra không có Content-Disposition
:
null=[HTTP/1.1 200 OK]
ETag=["244005-f36d40-4d003f3868000"]
Date=[Sat, 08 Dec 2012 12:29:02 GMT]
Content-Length=[15953216]
Last-Modified=[Tue, 04 Dec 2012 10:01:36 GMT]
Content-Type=[application/x-msdos-program]
Connection=[close]
Accept-Ranges=[bytes]
Server=[Apache/2.2.16 (Debian)]
Vậy làm thế nào tôi có thể lấy lại tên tập tin chính xác? Liên kết trong trình duyệt tải xuống tệp có tên FoxitReader544.11281_enu_Setup.exe
.
Bất kỳ ý tưởng nào ?!
Wow! Tôi đoán GET là Ok vì thông tin 'HTTP/1.1 200 OK' ?! Tại sao tôi nhận được 200 nếu tôi nhận được 302? – Marco
Nó tự động chuyển hướng, nếu tham số được đặt. Xem [** 'getFollowRedirects()' **] (http://docs.oracle.com/javase/1.5.0/docs/api/java/net/HttpURLConnection.html#getFollowRedirects()) và [** ' setFollowRedirects() '**] (http://docs.oracle.com/javase/1.5.0/docs/api/java/net/HttpURLConnection.html#setFollowRedirects (boolean)) –
Tốt đẹp! Cảm ơn nhiều! Cần đợi thêm 2 phút nữa để chấp nhận ...;) – Marco