2012-06-12 32 views
11

Có thể lấy tên của tệp được tải xuống bằng HttpURLConnection không?HttpURLKết nối tên tệp đã tải xuống

URL url = new URL("http://somesite/getFile?id=12345"); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
conn.setRequestMethod("GET"); 
conn.setAllowUserInteraction(false); 
conn.setDoInput(true); 
conn.setDoOutput(true); 
conn.connect(); 
InputStream is = conn.getInputStream(); 

Trong ví dụ trên tôi không thể trích xuất tên tệp từ URL, nhưng máy chủ sẽ gửi cho tôi tên tệp theo cách nào đó.

+0

Fantastic question.Whenever chúng tôi cố gắng để xác định tên tập tin thu được trong khi thực hiện yêu cầu url khi đang bay, trường hợp sử dụng này sẽ có ý nghĩa ... – sskumar86

Trả lời

14

Bạn có thể sử dụng HttpURLConnection.getHeaderField(String name) để có được những Content-Disposition tiêu đề, mà thường được sử dụng để thiết lập tên file:

String raw = conn.getHeaderField("Content-Disposition"); 
// raw = "attachment; filename=abc.jpg" 
if(raw != null && raw.indexOf("=") != -1) { 
    String fileName = raw.split("=")[1]; //getting value after '=' 
} else { 
    // fall back to random generated file name? 
} 

Như câu trả lời khác chỉ ra, máy chủ có thể quay trở lại tên file không hợp lệ, nhưng bạn có thể thử nó.

+0

Cảm ơn, máy chủ cụ thể này dường như đang gửi Nội dung-Bố trí cho mọi tệp được yêu cầu qua nhận thông số. Đối với các liên kết trực tiếp, tôi sẽ phân tích cú pháp url. – capitano666

+0

Sau khi tìm nạp tên tệp từ tiêu đề, Từ nơi tải xuống tệp đó? Tệp sẽ ở đâu? Hãy giúp tôi ra. Cảm ơn. – Dharmendra

+0

@Dharmendra Bạn có thể sử dụng [URLConnection.getInputStream()] (http://docs.oracle.com/javase/6/docs/api/java/net/URLConnection.html#getInputStream()) để nhận luồng đầu vào và ghi vào tập tin. –

4

Câu trả lời thẳng thắn là - trừ khi máy chủ web trả về tên tệp trong tiêu đề Loại bỏ nội dung, không có tên tệp thực. Có lẽ bạn có thể đặt nó vào phần cuối của URI sau /, và trước chuỗi truy vấn.

Map m =conn.getHeaderFields(); 
if(m.get("Content-Disposition")!= null) { 
//do stuff 
} 
+0

Các máy chủ đang gửi tên tập tin một cách nào đó, trên thực tế nếu tôi sử dụng cùng một liên kết trên trình duyệt web mà tôi được cung cấp để lưu tệp và nó có tên. Tôi chỉ không biết cách tìm nạp. – capitano666

+1

Vâng, sau đó tôi chắc chắn đoạn mã dưới đây sẽ giúp bạn! –

0

Kiểm tra Content-Disposition: tiêu đề đính kèm trong phản hồi.

0
Map map = connection.getHeaderFields(); 
      if (map.get ("Content-Disposition") != null) 
      { 
       String raw = map.get ("Content-Disposition").toString(); 
       // raw = "attachment; filename=abc.jpg" 
       if (raw != null && raw.indexOf ("=") != -1) 
       { 
        fileName = raw.split ("=")[1]; // getting value after '=' 
        fileName = fileName.replaceAll ("\"", "").replaceAll ("]", ""); 
       } 
      } 
Các vấn đề liên quan