2016-09-06 14 views
8

Tôi muốn thực hiện một trình tải lên nhiều tệp trong một biểu mẫu trong đó tôi muốn các tệp để người dùng có thể sắp xếp mức độ ưu tiên của tệp (tôi đang sử dụng tính năng kéo và công cụ Jquery có thể sắp xếp).Vượt qua một đối tượng tập tin HTML từ một <input type = file> sang một <type> file = khác>

Vì vậy, tôi đã thêm một tập tin đầu vào nhiều như:

<input type = "file" multiple> 

Bây giờ khi tôi chọn một số tập tin, nó cho thấy nói 3 tập tin được chọn. Nhưng khi tôi chọn 3 tệp, tôi muốn chia tệp trình tải lên trong 3 phần để người dùng có thể đặt thứ tự ưu tiên phù hợp.

Cho rằng tôi đã sử dụng các loại mã sau đây:

$('.files').change(function(e){ 
var filesSelected = e.target.files; 
if(filesSelected.length > 1){ //if user selects multiple files, then automatically split the files into multiple divs so that he/she may do the ordering of files 
    //Here I want to create a list of all the files and implement the draggable and sortable thing. 
} 
}); 

Tình hình là, tôi không thể để phân chia các mảng của các đối tượng của FileList và gán từng đối tượng để đầu vào khác.

Hy vọng tôi rõ ràng trong sự nghi ngờ của tôi và câu hỏi là dễ hiểu, vì đây là lần đầu tiên tôi đăng trong diễn đàn như vậy.

+0

Hãy giả sử rằng phần tử kiểu đầu vào = tệp được đặt với các tệp lớp –

Trả lời

0

Từ các bài đăng tôi nhận được và các cuộc thảo luận ngắn gọn, rõ ràng là đặt giá trị tệp theo lập trình sẽ đặt ra mối đe dọa bảo mật và do đó không phải là một lựa chọn tốt. Theo cách giải quyết vấn đề của tôi, tốt nhất là tìm cách tạo nhiều div/trường chứa tên tệp của các tệp đang được tải lên và sau đó áp dụng tính năng kéo/thả/sắp xếp trong tập hợp div đó. Bằng cách này, người dùng có thể dễ dàng ưu tiên các tệp và trong khi lưu biểu mẫu mảng/trường có mức độ ưu tiên sẽ được xem xét trước khi lưu dữ liệu tệp trong cơ sở dữ liệu.

Nhờ người trả lời phản hồi nhanh của họ.

3

Bạn có thể cố gắng để lặp qua các tập tin được lựa chọn và sau đó tạo ra một div động với jquery có chứa các dữ liệu từ các tập tin như thế này

$('.files').change(function(e){ 
var filesSelected = e.target.files; 
if(filesSelected.length > 1){ 
    for(var i=0;i<filesSelected.length;i++) { // We iterate through the selected Files 
     $("#idFromParentElement").append('<div> id=File'+i+'</div'); // Then we create and append the new div to the parent element of our choice 
     var fileId = 'File'+i; 
     $("#fileId").data("file",filesSelected[i]); //After that we include a data into the div with the selected file. 
    } 
} 
}); 
+0

Cảm ơn Javier, nhưng phần dữ liệu dường như không hoạt động đối với tôi. Thay vì tạo nhiều div, tôi muốn tạo nhiều kiểu đầu vào trong vòng lặp và chỉ định một tệp từ các loại đầu vào được chọn cho mỗi trường nhập mới. –

+1

Như đã nói bởi Zoli trên câu trả lời khác, thiết lập một lĩnh vực đầu vào theo chương trình là generaly một nguy cơ bảo mật. Có lẽ bạn có thể thử lưu trữ các FileList trong javascript của bạn và tạo divs lưu trữ vị trí của tập tin trên mảng. Bằng cách đó bạn có thể nhận được kết quả tương tự mà không cần sử dụng dữ liệu và bảo mật tốt. –

+0

Có, tôi đoán sẽ tốt hơn khi tìm nạp tên tệp và tạo một tập hợp div khác với tên tệp và tính năng sắp xếp/có thể kéo được triển khai trong tập hợp đó và sau đó xử lý chúng tương ứng tại thời điểm lưu biểu mẫu. –

3

Bạn không thể đặt giá trị cho <input type="file"> lập trình. Nó sẽ là một dòng chảy an ninh lớn. Hãy tưởng tượng một số trang web tự động tải lên các tệp tùy ý từ máy tính của bạn.

+0

Tôi không muốn đặt giá trị theo chương trình, thay vào đó tôi muốn sử dụng trình tải lên nhiều tệp để chọn nhiều tệp, mà theo cách tạo ra một FileList là một mảng các đối tượng FIle. Sử dụng mảng này tôi muốn lặp qua nó và chọn từng phần tử và gán vào một trường đầu vào mới, kiểu đó cũng sẽ là tệp. –

+1

Từ quan điểm của tôi, đây chính xác là thiết lập một giá trị tùy ý cho đầu vào kiểu tệp. –

+1

Đồng ý. Tôi nghĩ rằng tôi đã tìm ra câu trả lời cho vấn đề này. Cám ơn phản hồi của bạn –

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