アップロードされるファイルの数を任意の数、さらには1つに制限するオプションがpluploadAPIドキュメントに表示されません。
Docは失敗しますか?または機能が失敗しますか?それが存在しない場合、誰かがそれを必要とするならば、私はそれを実現するために取り組んでいます。
それは機能の失敗です。 jQuery APIのラッパーを作成しました。これは、jQueryAPIを機能させるために行ったことです。私のコードは他のビジネスロジックを実行しますが、開始するのに十分なはずです。
基本的に、FilesAdded
イベントにバインドし、アップローダーオブジェクトでremoveFile
を呼び出します(ファイルが多すぎる場合)。ファイルがまだ存在しないという問題が発生したため、50ミリ秒のタイムアウトを追加したと思います。
uploader.bind('FilesAdded', function (up, files) {
var i = up.files.length,
maxCountError = false;
plupload.each(files, function (file) {
if(uploader.settings.max_file_count && i >= uploader.settings.max_file_count){
maxCountError = true;
setTimeout(function(){ up.removeFile(file); }, 50);
}else{
// Code to add pending file details, if you want
}
i++;
});
if(maxCountError){
// Too many files uploaded, do something
}
});
max_file_count
は、作成時にpluploaderインスタンスに追加するものです。
編集:私は実際にこれのために2つの異なる方法をしなければなりませんでした。上記では、特定の数のファイルのみをアップロードできます(それ以外の場合はエラーが発生します)。
このスニペットは同様に機能しますが、既存のファイルを削除し、最新のもののみをアップロードします。
uploader.bind('FilesAdded', function (up, files) {
var fileCount = up.files.length,
i = 0,
ids = $.map(up.files, function (item) { return item.id; });
for (i = 0; i < fileCount; i++) {
uploader.removeFile(uploader.getFile(ids[i]));
}
// Do something with file details
});
これを行う他の方法:
$(document).ready(function () {
var uploader = new plupload.Uploader({
...
multi_selection: false,
....
});
よろしく
Jonathon Bolsterの2番目の回答に基づいて、最後に選択したファイルへのアップロードを制限するために、この単純なスニペットを作成しました。
uploader.bind('FilesAdded', function(up, files) {
while (up.files.length > 1) {
up.removeFile(up.files[0]);
}
});
これを使用できますmax_file_count: 5
ここで、5はアップロードカウントの最大数です。
なぜだけではないのですか
if (files.length > 1) uploader.splice(1, files.length - 1);
multi_selectionオプションをfalseに設定することで、複数選択を無効にできるようになりました
ちょうどこのような
var uploader = new plupload.Uploader({
runtimes : 'html5,flash',
browse_button : 'button_id',
multi_selection:false, //disable multi-selection
...
公式ドキュメントはこちら: http://www.plupload.com/documentation.php
これを試して。それは私にとってはうまくいきます。
uploader.bind('FilesAdded', function(up, files) {
if(uploader.files.length > 1)
{
uploader.removeFile(uploader.files[0]);
uploader.refresh();// must refresh for flash runtime
}
。 。 。レスト
アイデアは、現在のアップローダーオブジェクトでnumファイルをテストすることです。長さが1より大きい場合は、メソッドuploader.removeFile
を使用してください。引数はfiles[0]
であり、ファイルIDではなく、完全なファイルオブジェクトであることに注意してください。
({id:"p17bqh1v4dp42gdf1gan75p16tp3", name:"gnome-globe.png", size:48456, loaded:0, percent:0, status:1})
宜しくお願いします!
FilesAdded: function(up, files) {
up.files.splice(0,up.files.length-1);
},
multi_selection: false,
使用する up.files
、ただfiles
。 files
には、ファイルブラウザから選択した単一のアイテムが常に含まれます。 up.files
は、最後に選択したファイルに縮小する必要がある実際のリストです。
カスタムアップローダーを使用して、一度に1つのファイルをアップロードする場合、自動アップロードは行わず、最後に追加されたファイルが新しいファイルになります。これを使用します。
uploader.bind('FilesAdded', function(up, files) {
// Clear the HTML
$('#plupload-files').html('');
// Plup does not offer before file added event
if (up.files.length > 1) {
up.splice(0, up.files.length);
up.addFile(files[0])
return;
}
// $.each(files, function(){....
}
Plupはすでにすべてのファイルをキューに追加しているため、配列全体をスプライスします。受け入れられた回答のようにキューをスプライスすると、ユーザーがファイルを追加しようとするたびに実際に1つのファイルが追加され、新しいファイルを単独で追加しようとすると、古いファイルをファイル配列のpos [0]に保持します。
次に、追加しようとしたファイルの最初のファイルを追加します。このように、キューにはファイルが1つだけあり、それは常に、追加しようとした最後のファイルグループの最初のファイルです。
すなわち。
Pluploadにドラッグします 'file1.jpg'、 'file2.jpg'、 'file3.jpg'
キュー全体をクリアし、「file1.jpg」を追加し直します
Pluploadにドラッグします 'file4.jpg'、 'file5.jpg'、 'file6.jpg'
キュー全体をクリアし、「file4.jpg」を追加し直します
Plupload'file99.jpg 'にドラッグします
キュー全体をクリアし、「file99.jpg」を追加し直します
これにより、一度に1つのファイルのみをアップロードする場合に、カスタムplupを管理できます。述べたように、他の答えは一度だけ、または自動開始アップロードで機能します。
アップロードできるファイルは1つだけです。
uploader.bind('FilesAdded', function(up, files) {
$.each(files, function(i, file) {
if(uploader.files.length!=1){uploader.removeFile(file); return;}
});
});
一度に1つのファイルを選択できるようにします。
uploader.bind('FilesAdded', function(up, files) {
$.each(files, function(i, file) {
if(i){up.removeFile(file); return;}
});
});
1つのファイルを一度にアップロードできるようにします。
uploader.bind('FilesAdded', function(up, files) {
$.each(files, function(i, file) {
if(uploader.files.length!=1){uploader.removeFile(file); return;}
});
});
uploader.bind('FileUploaded', function(up, file,response) {
up.removeFile(file);
});
私はこれが答えられたことに気づきました、しかし私が行った解決策はただQueueChanged
コールバックを使うことでした:
QueueChanged: function(uploader) {
// Called when queue is changed by adding or removing files
//log('[QueueChanged]');
if(uploader.files.length > 1) {
uploader.files.splice(0, (parseInt(uploader.files.length) - 1));
}
}
このコードでは、最後に選択されたファイルのみが保持されます(再度選択した理由が、間違ったファイルを選択したためである場合)。
アップロードする前に、不要なファイルを直接削除します。
$('uploadfiles').onclick = function()
{
while (uploader.files.length > 1)
{
uploader.removeFile(uploader.files[0]);
}
uploader.start();
return false;
};
それぞれの解決策を試した後、私はすべての中で最も単純なものを思いつきました-それはうまくいくようです。
コアAPIを使用していて、multi_selectionをfalseに設定しています。次に、最初のファイルが選択(追加)された後、FilesAddedイベントに挿入した2行目のコードが、参照リンクを非表示にします。これはjqueryウィジェットでは実行できないと思います。また、アップロードリンクが参照リンクの場所をカバーしていない限り、それは存続していることもわかりました。
uploader.bind('FilesAdded', function(up, files) {
//line below hides button
document.getElementById("browse").style.display = "none";
var html = '';
plupload.each(files, function(file) {
html += '<li id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b></li>';
});
document.getElementById('filelist').innerHTML += html;
});