[前後の物語]PHPはどのように画像をアップロードしますか?
3877 ワード
最近、一部の友达は、写真をアップロードするときに引っかかりました.ある友达は、私はもう一日を無駄にして、どうすればいいか全然分からないと言った.こんな時は身を挺して出なければなりません.初心者にとって、画像をアップロードするのは複雑なことですが、今日はよく使われる2つの方法を整理して、初心者に画像をアップロードする小さな難題を簡単に把握させました.
(一)formフォームアップロード
この方式は単純暴力で、特別な需要がなければ、データと画像を一度に処理する場合、この方式が最適です.
フロントエンドのコード: action要求のバックエンドメソッド enctype=「multipart/form-data」ファイルアップロードコントロールを含むフォームを使用する場合は、この値を使用する必要があります.
バックエンドのコード:
簡単なformフォームでファイルをアップロードすれば終わります!
(二)ajax更新なしアップロード画像
従来のformフォームのコミットではページがリフレッシュされますが、ajax方式で要求される場合があります.
多くの人はJQueryのajax操作を思い浮かべるに違いないが、このようなやり方は役に立たない.一般的なパラメータしか伝わらないので、ファイルはアップロードできない.この時FormDataというものが現れて私たちを救った
FormDataについて
XMLHttpRequest Level 2には、FormDataオブジェクトを使用して、JavaScriptでいくつかのキー値ペアを使用して一連のフォームコントロールをシミュレートする新しいインタフェースFormDataが追加されています.XMLHttpRequestのsend()メソッドを使用して、このフォームを非同期でコミットすることもできます.通常のajaxよりもFormDataを使用する最大の利点は、バイナリファイルを非同期でアップロードできることです.Chrome 7+、Firefox 4+、IE 10+、Opera 12+、Safari 5+など、すべての主流ブラウザの比較的新しいバージョンがこのオブジェクトをサポートしています.
以下を参照してください.https://developer.mozilla.org/zh-CN/docs/Web/API/FormDataオリジナルXMLHttpRequest を実現
フロントエンドのコード:
jsのコード:
以下を参照してください.https://developer.mozilla.org/zh-CN/docs/Web/Guide/Using_FormData_Objects
バックエンドコード:メソッド1のように、変更されません. JQuery+FormDataで を実現
実はJQueryも操作可能ですが、古いバージョンではサポートされていないので、2.0と更新バージョンを使うことをお勧めします.
フロントエンドコード:
jsコード:
バックエンドコード:メソッド1のように、変更されません.
更新されていないアップロード画像機能も、簡単にできました!
まとめ
一般的には業務の選択に応じて実現され、文章の中では主にどのように実現するか、いくつかの細部の処理か、それともみんなが自分で処理する必要があるかを教えています.質問やアドバイスがあれば、連絡してください.
(一)formフォームアップロード
この方式は単純暴力で、特別な需要がなければ、データと画像を一度に処理する場合、この方式が最適です.
フロントエンドのコード:
バックエンドのコード:
public function upload(){
//
$pic = $_FILES['pic']['tmp_name'];
$upload_ret = false;
if($pic){
// ,
$uploadDir = 'static/upload';
//
if(!file_exists($uploadDir)){
mkdir($uploadDir, 0777);
}
// ,
$targetFile = $uploadDir . '/' . time() . $_FILES['pic']['name'];
// ,
$upload_ret = move_uploaded_file($tempFile, $targetFile) ? true : false;
}
return $upload_ret;
}
簡単なformフォームでファイルをアップロードすれば終わります!
(二)ajax更新なしアップロード画像
従来のformフォームのコミットではページがリフレッシュされますが、ajax方式で要求される場合があります.
多くの人はJQueryのajax操作を思い浮かべるに違いないが、このようなやり方は役に立たない.一般的なパラメータしか伝わらないので、ファイルはアップロードできない.この時FormDataというものが現れて私たちを救った
FormDataについて
XMLHttpRequest Level 2には、FormDataオブジェクトを使用して、JavaScriptでいくつかのキー値ペアを使用して一連のフォームコントロールをシミュレートする新しいインタフェースFormDataが追加されています.XMLHttpRequestのsend()メソッドを使用して、このフォームを非同期でコミットすることもできます.通常のajaxよりもFormDataを使用する最大の利点は、バイナリファイルを非同期でアップロードできることです.Chrome 7+、Firefox 4+、IE 10+、Opera 12+、Safari 5+など、すべての主流ブラウザの比較的新しいバージョンがこのオブジェクトをサポートしています.
以下を参照してください.https://developer.mozilla.org/zh-CN/docs/Web/API/FormData
フロントエンドのコード:
jsのコード:
function upload(){
//
var url="upload";
//
var pic = document.getElementById('pic').files[0];
// XMLHttpRequest
var xhr = new XMLHttpRequest();
// FormData
var form = new FormData();
//
form.append("pic", pic);
//
xhr.open("POST", url, true);
// readystatechange
xhr.onreadystatechange=callback;
xhr.send(form);
function callback() {
if(xhr.readyState == 4){
if(xhr.status == 200){
if(xhr.responseText == 1){
alert(' ');
window.location.reload();
}else{
alert(" ");
}
}
}
}
}
以下を参照してください.https://developer.mozilla.org/zh-CN/docs/Web/Guide/Using_FormData_Objects
バックエンドコード:メソッド1のように、変更されません.
実はJQueryも操作可能ですが、古いバージョンではサポートされていないので、2.0と更新バージョンを使うことをお勧めします.
フロントエンドコード:
jsコード:
function upload(){
var form = new FormData($("#upload_form")[0]);
$.ajax({
url:'upload',
type:'POST',
data:form,
success:function (result){
alert(result);
},
error:function (result){
alert(result);
}
});
}
バックエンドコード:メソッド1のように、変更されません.
更新されていないアップロード画像機能も、簡単にできました!
まとめ
一般的には業務の選択に応じて実現され、文章の中では主にどのように実現するか、いくつかの細部の処理か、それともみんなが自分で処理する必要があるかを教えています.質問やアドバイスがあれば、連絡してください.