2010-03-05 31 views
6

Tôi đang nghiên cứu trên một khung công tác web/kỹ thuật cho phép kéo n thả tệp từ hệ thống tệp vào ứng dụng web. Mục đích của khóa học là tải các tệp đó lên máy chủ ứng dụng.Kéo thả n từ hệ thống tập tin vào ứng dụng web

Trong Flex có vẻ như không thể thực hiện được (mặc dù nó hoạt động với AIR). Tôi đã tìm thấy một cách với Google Gears, nhưng điều này buộc người dùng phải cài đặt Gears làm plugin trình duyệt.

Với một ứng dụng Java, có vẻ như có thể nhưng nó yêu cầu người dùng chấp nhận ngoại lệ quy tắc bảo mật ... (thật lạ khi đọc tệp do người dùng chỉ định qua DnD không "kém an toàn" hơn nếu người dùng đã chỉ định tệp thông qua hộp thoại Tải lên điển hình chuẩn ...).

Có cách nào không xâm nhập để cho phép tính năng này, không cài đặt bất kỳ plugin nào và không chấp nhận hộp thông báo cảnh báo bảo mật không?

+0

Tôi xác nhận 3 năm sau đó để thiết kế dự phòng trình tải lên flash, có vẻ như chúng tôi vẫn cần sử dụng AIR cho các tính năng kéo thả tệp n. Tôi đã tìm kiếm giải pháp AS3 mà không có may mắn. Hy vọng rằng, HTML5 trở nên phổ biến hơn như năm 2013 sẽ bắt đầu. –

Trả lời

4

số

Trình duyệt không thường có hỗ trợ cho các loại điều này được xây dựng trong.

+2

Ngoài ra, tôi sẽ tránh Gears. Google đang bỏ nó ủng hộ các tính năng được xây dựng trong HTML 5. http://www.readwriteweb.com/archives/google_dumps_gears_for_html5.php – NotMe

4

Firefox 3.6 và rõ ràng nhất là Safari (có thể Webkit đêm) hỗ trợ này thông qua HTML5. Tôi đã chơi với nó gần đây và nó hoạt động khá tốt. Ví dụ tôi đã thực hiện chỉ chèn hình thu nhỏ vào trang, nhưng điều này có thể được điều chỉnh để tải dữ liệu lên máy chủ. Dưới đây là các mã JavaScript/jquery tôi đã viết, cảm thấy tự do để sử dụng này:

function debug(string) { 
    $("#debugArea").append(string); 
} 

$(function() { 
    // We need to override the dragover event, otherwise Firefox will just open the file on drop 
    $("#dropArea").bind("dragover", function(event) { 
    event.preventDefault(); 
    }); 

    // This is where the actual magic happens :) 
    $("#dropArea").bind("drop", function(event) { 
    event.preventDefault(); 
    debug("Dropped something: "); 
    // Since jquery returns its own event object, we need to get the original one in order to access the files 
    var files = event.originalEvent.dataTransfer.files; 
    // jquery nicely loops for us over the files 
    $(files).each(function(index, file) { 
    if(!file.type.match(/image.*/)) { // Skip non-images 
     debug(file.name) 
     debug(" <em>not an image, skipping</em>; "); 
     return; 
     } 

     // We need a new filereader for every file, otherwise the reading might be canceled by the next file 
     var filereader = new FileReader(); 
     filereader.onloadend = function(event) { $("#thumbnails").append("<img src='"+event.target.result+"' width='100px' />"); }; 
     debug(file.name); 
     debug("; "); 

     // Read the file in data URL format so that we can easily add it to an img tag. 
     filereader.readAsDataURL(file); 
    }); 
    debug("<br/><br/>"); 
    }) 

}); 

Và HTML cho nó:

<div id="dropArea"> 
    <p>Drop images here!</p> 
</div> 
<div id="thumbnails"> 
</div> 
<div id="debugArea"> 
    <strong>Debug Info:</strong><br/> 
</div> 
+0

Tôi thực sự thích mã này. Ngay cả khi nó ngắn gọn, nó vẫn trả lời rất nhiều vấn đề liên quan đến việc tải lên tệp và nó giúp thiết kế các chức năng đơn giản để tải lên và nhận hình thu nhỏ thay vì tìm kiếm mã và đoạn mã hiện có. BTW, đọc các tập tin để URI với filereader cũng cho phép áp dụng mã hóa cho các tập tin sau đó gửi chúng dưới dạng dữ liệu nhị phân cho một tập lệnh. –

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