彼は、あなたがすでに解決策を見つけたかどうかはわかりませんが、おそらくこれを見ることができます:
最初の HTML フォーム
送信ボタンなしでボタンボタンだけの通常のhtmlフォームを作成するだけです。私のソリューションにも派手な読み込みバーがあることに注意してください!
<form enctype="multipart/form-data" id="myform">
<input type="text" name="some_usual_form_data" />
<br>
<input type="text" name="some_other_usual_form_data" />
<br>
<input type="file" multiple name="file[]" id="image" /> <sub>note that you have to use [] behind the name or php wil only see one file</sub>
<br>
<input type="button" value="Upload files" class="upload" />
</form>
<progress value="0" max="100"></progress>
<hr>
<div id="content_here_please"></div>
accept="image/*"
またはその方法で何かを追加して、必要または必要なファイルタイプのみを選択できるようになりました。
次に、jquery/javascript を使用したアップロード
あなたのもののように見えますが、それよりも優れています。
$(document).ready(function () {
$('body').on('click', '.upload', function(){
// Get the form data. This serializes the entire form. pritty easy huh!
var form = new FormData($('#myform')[0]);
// Make the ajax call
$.ajax({
url: 'action.php',
type: 'POST',
xhr: function() {
var myXhr = $.ajaxSettings.xhr();
if(myXhr.upload){
myXhr.upload.addEventListener('progress',progress, false);
}
return myXhr;
},
//add beforesend handler to validate or something
//beforeSend: functionname,
success: function (res) {
$('#content_here_please').html(res);
},
//add error handler for when a error occurs if you want!
//error: errorfunction,
data: form,
// this is the important stuf you need to overide the usual post behavior
cache: false,
contentType: false,
processData: false
});
});
});
// Yes outside of the .ready space becouse this is a function not an event listner!
function progress(e){
if(e.lengthComputable){
//this makes a nice fancy progress bar
$('progress').attr({value:e.loaded,max:e.total});
}
}
私はこれを簡単に保ったと信じています。ただし、ここで JavaScript 関数を作成して、ファイルを検証したり、フォーム全体が必要な場合は検証したりできます。関数名を検証するだけでbeforeSend: youvalfunctname
、 のようにそこにコールバックを作成することもできますbeforeSend: function(){ //do stuf here }
。アップロード中にエラーが発生した場合は、 で同じことができますerror:
。
サーバー側のphp. やっと
あなたはここであなたがやりたいことをすることができますが、私はあなたがそれを行う方法の例を示しています.
<?php
$succeed = 0;
$error = 0;
$thegoodstuf = '';
foreach($_FILES["file"]["error"] as $key => $value) {
if ($value == UPLOAD_ERR_OK){
$succeed++;
//took this from: "https://stackoverflow.com/questions/7563658/php-check-file-extension"
//you can loop through different file types
$file_parts = pathinfo($filename);
switch($file_parts['extension'])
{
case "jpg":
//do something with jpg
break;
case "exe":
// do sometinhg with exe
break;
case "": // Handle file extension for files ending in '.'
case NULL: // Handle no file extension
break;
}
$name = $_FILES['file']['name'][$key];
// replace file to where you want
copy($_FILES['file']['tmp_name'][$key], './upload/'.$name);
$size = filesize($_FILES['file']['tmp_name'][$key]);
// make some nice html to send back
$thegoodstuf .= "
<br>
<hr>
<br>
<h2>File $succeed - $name</h2>
<br>
give some specs:
<br>
size: $size bytes
";
}
else{
$error++;
}
}
echo 'Good lord vader '.$succeed.' files where uploaded with success!<br>';
if($error){
echo 'shameful display! '.$error.' files where not properly uploaded!<br>';
}
echo '<br>O jeah there was a field containing some usual form data: '. $_REQUEST['some_usual_form_data'];
echo '<br>O jeah there was a field containing some usual form data: '. $_REQUEST['some_other_usual_form_data'];
echo $thegoodstuf;
?>
画像をアップロードするために特別に作成されたデモもご覧ください。常にオンラインであるとは限りません。
また、ここにデモのコード例があります