Tôi phải tải xuống tệp và tôi đang sử dụng this code, về cơ bản là AsyncTask
có nghĩa là cập nhật thanh tiến trình. Nhưng, vì tôi không biết kích thước tập tin tôi đã phải sử dụng thanh tiến trình spinner. Vì vậy, làm thế nào tôi có thể nhận được kích thước tập tin trước khi bắt đầu tải về nó để tôi có thể sử dụng một thanh tiến trình bình thường?Làm thế nào để biết kích thước của một tập tin trước khi tải xuống?
Trả lời
bạn có thể nhận tiêu đề được gọi là Content-Length
tạo thành đối tượng Phản hồi HTTP mà bạn nhận được, điều này sẽ cung cấp cho bạn độ dài của tệp. bạn nên lưu ý, mặc dù một số máy chủ không trả lại thông tin đó và cách duy nhất để biết kích thước thực tế là đọc mọi thứ từ phản hồi.
Ví dụ:
URL url = new URL("http://server.com/file.mp3");
URLConnection urlConnection = url.openConnection();
urlConnection.connect();
int file_size = urlConnection.getContentLength();
điều này sẽ hoạt động trên hầu hết các trường hợp, nhưng nếu tệp quá lớn, tệp sẽ không hoạt động. xem bài đăng của tôi bên dưới để biết giải pháp luôn hoạt động: http://stackoverflow.com/a/12271781/878126 –
Bạn nên sử dụng getContentLengthLong() thay vì getContentLength() cho Android 7 trở lên. Bên dưới thích sử dụng Long.parseLong (urlConnection.getHeaderField ("chiều dài nội dung")) – Sandeep
bạn thường có thể sử dụng getContentLength, nhưng điều tốt nhất là nó có được độ dài của chính mình (vì nó có thể bỏ qua giá trị tối đa số nguyên nhân).
chỉ phân tích cú pháp giá trị tiêu đề nội dung có độ dài của chính bạn. phân tích cú pháp tốt hơn.
dụ:
final URL uri=new URL(...);
URLConnection ucon;
try
{
ucon=uri.openConnection();
ucon.connect();
final String contentLengthStr=ucon.getHeaderField("content-length");
//...
}
catch(final IOException e1)
{
}
làm lưu ý rằng tôi có thể là bất kỳ chuỗi, vì vậy sử dụng cố gắng nắm bắt, và nếu nó là -1, trống rỗng, hoặc null, nó có nghĩa là bạn không thể biết kích thước của tệp vì máy chủ không cho phép.
Nguyên thủy int của Java là một số nguyên có dấu 32 bit; bạn có thể sẽ không vượt qua giá trị tối đa với tiêu đề Content-Type header – mjama
thực sự bạn có thể, khoảng 2GB. –
vì vậy phải làm gì ở phía máy chủ để làm cho nó cho phép ..? –
- 1. Kiểm tra kích thước tải xuống trước khi tải xuống
- 2. Ajax - Nhận kích thước tệp trước khi tải xuống
- 3. Python ftplib không thể nhận được kích thước của tập tin trước khi tải về?
- 4. Làm thế nào để biết kích thước của tập tin swf mà không có Flash?
- 5. Làm thế nào để nói curl để kiểm tra sự tồn tại của tập tin trước khi tải xuống?
- 6. Tải kích thước tệp tải lên trước khi tải lên
- 7. Iteratee I/O: cần phải biết kích thước tập tin trước
- 8. Làm thế nào để xóa [] biết kích thước của một mảng?
- 9. Có thể xác định kích thước tệp cần tải xuống?
- 10. PHP - Thay đổi kích thước hình ảnh trong máy chủ trước khi trình duyệt tải xuống
- 11. lấy kích thước tệp của một tệp để wget trước khi wget-ing nó?
- 12. Tăng kích thước của một tập tin sử dụng mmap
- 13. Asp.Net Kiểm tra kích thước tệp trước khi tải lên
- 14. SocketException trong khi tải xuống tệp zip kích thước lớn
- 15. Làm thế nào để bảo vệ tên tập tin từ xa khi tải về một tập tin sử dụng curl
- 16. Làm thế nào tôi có thể tiêm một bean vào một ApplicationContext trước khi nó tải từ một tập tin?
- 17. Sử dụng WinInet để xác định tổng kích cỡ tệp trước khi tải xuống
- 18. Thay đổi kích thước hình ảnh trước khi tải lên
- 19. jQuery/javascript - Nhận kích thước hình ảnh trước khi tải
- 20. Cách lấy kích thước của một tệp trước khi tải lên?
- 21. Wicket: tải xuống các tập tin sau khi onSubmit
- 22. Có giới hạn nào về kích thước tệp khi tải xuống bằng PHP không?
- 23. làm thế nào để thay đổi kích thước tập tin SVG lên với Imagick/ImageMagick
- 24. Tìm kích thước của tệp đằng sau liên kết tải xuống với jQuery
- 25. Làm thế nào để xóa [] "biết" kích thước của mảng toán hạng?
- 26. ASP.Net Tải tập tin xuống trình duyệt của khách hàng
- 27. Làm thế nào để xác định kích thước của hình ảnh mà không cần tải xuống (đầy đủ)?
- 28. Làm thế nào để có được kích thước tập tin trong Java
- 29. Lấy kích thước của thư mục hoặc tập tin
- 30. ColdFusion: lấy tên của một tập tin trước khi tải lên
Lưu ý rằng bạn nên gọi 'urlConnection.connect()' trước khi cố gắng truy cập vào tiêu đề 'Content-Length'. Không làm như vậy có thể hiệu quả, nhưng không phải trong mọi hoàn cảnh có thể. – Felix
Không biết rằng ... nó làm việc theo cách đó cho tôi, nhưng cảm ơn lời khuyên của bạn. Tôi sẽ chỉnh sửa câu trả lời. – Cristian