純粋な jquery/Javascript と php5 で作成された複数ファイル アップローダーが必要です。フラッシュファイルを使用しないでください。誰かがそのためのコードを持っている場合は、私と共有してください。File API を試してみましたが、IE と Opera をサポートしていません。
3118 次
1 に答える
2
クライアント側でblueimp jQuery File Uploadを使用して、複数のファイルをアップロードできます。多くのオプションがあり、カスタマイズ可能です。
PHP 側の場合は、何をすべきかについていくつかのアイデアに興味があるかもしれません (画像のアップロード フォームの一部にすぎないため、$log や $confImages などの一部の変数はここでは定義されていませんが、アイデアを得ることができます):
//Сheck that we have a file
if (empty($uploaded_image))
return false;
if ($uploaded_image['error']) {
$log->LogError($uploaded_image['error'] . ": Error uploading file.");
return false;
}
list($dirname, $basename, $extension, $filename) = array_values(pathinfo($uploaded_image['name'])); //Extract variables: dirname, basename, extension, filename
//Normalize file name. I may suggest using http://cubiq.org/the-perfect-php-clean-url-generator than this
$filename = iconv("utf-8","ascii//TRANSLIT",$filename);
$allowedExt = array("jpg","jpeg","gif","png");
$extension = strtolower($extension);
//Check if the image has allowed type
if (empty($extension) || !in_array($extension, $allowedExt)) {
$log->LogError("invalid_extension: Not allowed to upload file ".(empty($extension) ? "without extension" : "with extension $extension").". Allowed Extensions: ". implode(",",$allowedExt));
return false;
}
//Generate some random string in case if such file exists on server
$postfix = substr( md5(uniqid(rand(),1)), 3, 5 );
$newFile = $_SERVER['DOCUMENT_ROOT'].$upload_folder."/".$filename.'_'.$postfix.'.'.$extension; //new filename with appended random string to original filename);
//Check if the file with the same name is already exists on the server
if (file_exists($newFile)) {
$log->LogError("file_exists: File couldn't be uploaded, because such filename exist ".basename($newFile)." jau eksistē");
}
//Attempt to move the uploaded file to it's new place
if (move_uploaded_file($uploaded_image['tmp_name'],$newFile)) {
//I do some resizing also using http://phpthumb.gxdlabs.com/
$convertedimage = PhpThumbFactory::create($newFile, array("jpegQuality" => 80));
if (isset($confImages["max_width"]) || isset($confImages["max_height"]))
$convertedimage->resize($confImages["max_width"], $confImages["max_height"]);
$convertedimage->save( $newFile );
//Save image path to database
...
return $image;
} else {
$log->LogError("Couldn't copy file from temp folder " . $uploaded_image['tmp_name'] . " to location " . $newFile);
}
return false;
于 2011-05-12T05:40:53.547 に答える