2009-09-27 48 views
12

Dưới đây là những gì tôi đang hy vọng có thể làm:kích thước Nhận các tập tin yêu cầu qua ajax

Tôi muốn gửi một yêu cầu ajax vào một tập tin (tốt nhất với jQuery), và một khi các tập tin đã được tải, xác định kích thước của tệp được yêu cầu.

Sau một chút googling, rõ ràng là tôi thậm chí không có một ý tưởng tốt về câu hỏi đúng để yêu cầu con số này ra. Mọi sự trợ giúp sẽ rất được trân trọng.

Trả lời

37

Bạn có thể thực hiện yêu cầu HTTP HEAD và nhận kích thước tệp xấp xỉ bằng cách đọc tiêu đề HTTP Content-Length.

Loại yêu cầu này được sử dụng để lấy thông tin meta về URL ngụ ý theo yêu cầu, mà không chuyển bất kỳ nội dung nào của nó trong phản hồi.

var xhr = $.ajax({ 
    type: "HEAD", 
    url: "path/to/file.ext", 
    success: function(msg){ 
    alert(xhr.getResponseHeader('Content-Length') + ' bytes'); 
    } 
}); 
+0

+ upvote, đây phải là câu trả lời thực sự :) –

+0

Cảm ơn bạn @meder! – CMS

+0

Tôi đồng ý - Tôi thực sự có thể kết thúc bằng cách sử dụng phương pháp khác cho chức năng tên miền chéo, nhưng đây thực sự là câu trả lời tôi đang tìm kiếm khi tôi hỏi. – Peter

2

Bạn có thể tạo lệnh phía máy chủ để lấy đường dẫn và tên tệp, mở tệp để nhận độ dài và gửi kích thước lại cho máy khách. Làm thế nào bạn làm điều đó sẽ phụ thuộc vào ngôn ngữ phía máy chủ bạn đang sử dụng. Đó có phải là loại hành động bạn đang tìm kiếm không?

+0

Hm ... Vì vậy, tôi có thể sử dụng ajax để gọi một tệp php, sẽ tải lên nội dung của tệp tôi thực sự muốn, tìm hiểu xem nó lớn như thế nào, sau đó trả lại cả nội dung tệp và kích thước cho javascript . Và làm theo cách đó sẽ cho phép tôi gọi nội dung từ một tên miền khác mà không gặp rắc rối. Nghe có vẻ tuyệt vời - không phải tất cả những gì tôi nghĩ tôi đang tìm kiếm, nhưng là một giải pháp tuyệt vời. – Peter

+0

Vâng, tôi đã làm điều đó trong quá khứ với Java khi tạo một trình điều khiển tải xuống được ủy quyền. Bạn cũng có thể muốn xem xét đề xuất của CMS - Tôi chưa bao giờ nghĩ đến việc sử dụng lệnh HEAD, nhưng nếu tất cả những gì bạn cần là kích thước tệp, điều đó có thể hoạt động tốt hơn nữa. –

+0

đây là câu trả lời duy nhất cho đến nay tránh việc mã hóa gzip gây ra độ dài nội dung không được gửi lại. – user3338098

0
var XHRObj = $.ajax({ 
    type:'HEAD', 
    url:'/', 
    success:function(data) { 
     console.log(XHRObj.getResponseHeader('Content-Length')) 
    } 
}) 

Bạn về cơ bản làm một yêu cầu HEAD HTTP và truy vấn Content-Length, mà trả về X byte.

+0

nếu mã hóa gzip được sử dụng tiêu đề nội dung độ dài không được gửi – user3338098

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