2011-01-17 30 views
7

Tôi đang cố gắng tải tệp lên bằng các tính năng HTML5. Theo điều tra, tôi đã thấy rằng có 3 cách tải lên các tệp khác nhau,Phát hiện tính năng tải lên tệp HTML5 trong trình duyệt

  1. Bằng cách mã hóa tệp dưới dạng nhiều phần: Việc này chỉ được thực hiện khi chỉ hỗ trợ trình đọc tệp.
  2. Gửi dữ liệu nhị phân bằng phương pháp spec XMLHTTP2 (AJAX): Phương thức mới send(Blob/File) có thể gửi dữ liệu nhị phân trên dây.
  3. Đối tượng FormData: Sử dụng phương thức XMLHTTP(AJAX) send(FormData).

Bây giờ cho qua vấn đề trình duyệt và nhận diện tính năng đoạn mã như dưới đây rất đơn giản,

if(typeof FileReader == "undefined") 

Tuy nhiên tôi không chắc chắn làm thế nào để tìm hiểu xem send() phương pháp của AJAX trong trình duyệt hiện đang hỗ trợ send(FormData) or send(Blob/File) triển khai phương thức. Làm thế nào để tìm thấy nó? Có thủ thuật Object.property ở đây không? Hay cái gì khác?

Cảm ơn,

+1

Từ đọc thông số, có vẻ như gửi cho tôi (Blob/Tệp) được hỗ trợ nếu typeof FileReader! = 'Undefined', nhưng đây hoàn toàn là suy đoán –

+0

http://stackoverflow.com/questions/2311887/how- to-defined-presence-of-html5-dragndrop-file-upload-api-like-the-one-from/2312859 # 2312859 –

+0

Điều trên dường như liên quan đến quyền FileReader? Đối tượng DataTranfer nằm trong Drag Drop tuy nhiên tôi muốn biết cách phát hiện gửi (File) nơi chúng ta có thể tìm ra bằng cách nào đó phương thức send() của AJAX có hỗ trợ cho đối tượng File hay không? –

Trả lời

2

Để xử lý dữ liệu nhị phân, bạn sẽ muốn sử dụng WebSockets. Đây là một phần của HTML5 spec mới. Tuy nhiên đang có một vấn đề. Vào giữa tháng 12 năm 2010, WebSockets đã bị vô hiệu hóa trong mọi trình duyệt chính do lỗ hổng nhiễm độc bộ nhớ cache.

Cuối cùng tôi nghe thấy điều này vẫn là sorted out.

Để tải tệp lên trước khi gửi qua WebSockets, bạn nên sử dụng FileReader API được hỗ trợ trong phiên bản mới nhất của mỗi trình duyệt (theo hiểu biết tốt nhất của tôi).

Để kiểm tra xem FileReader được hỗ trợ, bạn nên kiểm tra như:

if (FileReader){ 
    // It's supported 
} 

Bạn cũng có thể kiểm tra:

if (window.URL){ 
    // 
} 

cho một sự thay thế.

+0

nếu (FileReader) ném lỗi trong Safari. Nhưng điều này hoạt động "if (window.FileReader)" – Dan

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