1. 程式人生 > >ajax 上傳檔案到php

ajax 上傳檔案到php

作為一個開發人員,踩坑是必要的,不踩坑是不長進的。今天我們就來談談ajax上傳檔案時可能遇到的幾個大坑。
html 檔案:

</div>
<input type="file" id="fileloader"  name="file" />
<button  id="fileuploader">開始上傳</button>
</div>
$(function(){
    $('#fileuploader').click(function () {
    //獲取上傳檔案的相關資訊,得到的資料是陣列格式
        var
fileArray = document.getElementById('fileloader').files; var formData = new FormData(); for(var i=0; i<fileArray.length; i++){ formData.append("fileArray", fileArray[i]); } console.log(fileArray); $.ajax({ url: "../Myutil/upLoad_File"
,//傳向後臺伺服器檔案 type: 'post', //傳遞方法 data: formData, //傳遞的資料 dataType : 'json', //傳遞資料的格式 async:false, //這是重要的一步,防止重複提交的 cache: false, //設定為false,上傳檔案不需要快取。 contentType: false,//設定為false,因為是構造的FormData物件,所以這裡設定為false。
processData: false,//設定為false,因為data值是FormData物件,不需要對資料做處理。 success: function (responseStr) { if(responseStr.msg!=1){ alert(responseStr.info); }else{ alert(responseStr.info); } }, error: function () { alert("上傳錯誤!"); } }); //阻止繼續呼叫函式 // return false; }); });

上面的程式碼是ajax向伺服器傳遞檔案的方法,其中需要特別注意:
1.async:false,
false為同步,這個Ajax請求將整個瀏覽器鎖死,只有upLoad_File方法執行結束後,才可以執行其它操作。
2.async: true,
true是非同步的,這個ajax請求和其後面的操作是非同步執行的,那麼當upLoad_File方法還未執行完,就可能已經執行了 ajax請求後面的操作,如:alert(responseStr.info);然而,info這個資料是在ajax請求success後才賦值的,結果,輸出時會為空。

當然還有另一種方式來達到和同步的同種效果,那就是在函式體末尾加 return false;來防止函式的繼續呼叫。

伺服器接收檔案
我用的是php語言和thinkphp框架,編寫的接收方法如下

 public function upLoad_File(){
         //檔案儲存路徑
         $output_dir = APP_PATH."/../upload/";
         //獲取上傳檔名
         $fileName=$_FILES['fileArray']['name'];
         //獲取上傳檔案
         $file=$_FILES['fileArray'];
         if (!isset($file)){
                $this->ajaxReturn(array(
                    'msg'=>0,
                    "info"=>"檔案上傳失敗!",
                ));
            }else{
//上傳檔案
          if([email protected]_uploaded_file($file['tmp_name'],$output_dir.$fileName)){
                        $this->ajaxReturn(array(
                            'msg'=>0,
                            "info"=>"檔案上傳失敗!",
                        ));
                    } ;
                    $this->ajaxReturn(array(
                        'msg'=>1,
                        "info"=>"檔案上傳成功!!",
                    ));
                   // return $fileName;

        }
     }

服務端接收檔案需要注意的地方是$_FILES[‘fileArray’],它就是ajax傳過來的formData.append(“fileArray”, fileArray[i])資料。

相關推薦

ajax檔案,php接收

//html <input id="user_real_name" class="input_show" type="text" value="" placeholder="姓名"> <input id="file1" class="ufile" type="file" name

ajax 檔案php

作為一個開發人員,踩坑是必要的,不踩坑是不長進的。今天我們就來談談ajax上傳檔案時可能遇到的幾個大坑。 html 檔案: </div> <input type="file" id="fileloader" name="fi

php+ajax檔案

直接上原始碼 html頁面 <!DOCTYPE html> <html><head><meta charset="UTF-8" ><meta name="description" content=""/><

Ajax 檔案(input file FormData)

FormData物件用以將資料編譯成鍵值對,以便用XMLHttpRequest來發送資料。其主要用於傳送表單資料,但亦可用於傳送帶鍵資料(keyed data),而獨立於表單使用。 jQuery Ajax 上傳檔案 通過 Ajax 向後臺傳送檔案(包括圖片)時,其引數型別屬於物件。可以建立一個 FormD

Ajax檔案及攜帶引數

HTML程式碼 <div class="form-group"> <label class="col-sm-2 control-label">檔案上傳</label> <div class="col-sm-10"

SpringMVC Ajax檔案例項

做了一個檔案上傳模組,因為傳統的form提交會有頁面重新整理,不符合我的使用要求,所以我採用Ajax提交方式,這裡說明下,我的應用程式前端為Ajax提交,後端SpringMVC接收處理。 傳統form提交檔案方式: <form id="uploadPic" action="/user/

Django 使用ajax檔案

Django 使用ajax上傳檔案 JSON json指的是JavaScript物件表示法(JavaScript Object Notaion) json是輕量級的文字資料交換格式 json獨立於語言 json具有自我描述性,更易理解 JSON 使用 JavaScript 語法來描述資料物件,但是

ajax檔案 基於jquery form表單檔案

<script src="/static/js/jquery.js"></script><script> $("#reg-btn").click(function () { // 1. 取到使用者填寫的資料 var for

Springmvc中ajax檔案出現400錯誤

Springmvc中ajax上傳檔案出現400錯誤 一、配置spring-mvc.xml 需要在spring-mvc.xml中配置檔案上傳解析器 <!-- 定義檔案上傳解析器 --> <bean id="multipartResolver" cl

ajax 檔案,post檔案ajax 提交 JSON 格式的資料

ajax簡介 前後臺做資料互動 前後端做資料互動的方式(三種):     (1)瀏覽器視窗輸入地址(get的方式)(2)form表單提交資料(3)ajax提交資料 特點 特點:  (1)非同步       非同步與同步的區別:同步是請求發過去,要等著迴應;非同步不

django 基於form表單檔案和基於ajax檔案

一、基於form表單上傳檔案 1、html裡是有一個input type="file" 和 ‘submit’的標籤 2、vies.py def fileupload(request): if request.method == 'POST': print(request.P

Ajax檔案之上圖片

這用到iframe+form形式上傳圖片 簡單的  不利用formData物件 onchange=''   也是用來觸發事件,當狀態一改變就執行寫入的函式 為了確保圖片路徑要唯一:uuid+obj.name onload=''  做回撥函式,對後端傳來的資料處理 前端

ajax 檔案和form

1、檔案html,點選顯示 <div class="col-md-2"> <a href="javascript:void(0);" class="thumbnail">

利用js/jq 利用FormData 物件和ajax檔案

new FormData(); 可以獲取某個表單,但是有時候感覺不太靈活。可以利用jq獲取指定input type=file 中的檔案,將其賦值給FormData 例項的某個屬性,做上傳。 HTML: <div class="test" style="

ajax檔案與excel表格匯入總結

一、excel匯入:(還有別的外掛像EasuPoi  ,ExcelUtil等) 1、需要匯入包: Apache POI / 2、依賴: <dependency> <groupId>org.apache.poi</groupId> <

ajax檔案到後端

JSP程式碼:<input type="file" style="display: none" id="file" name="file" onchange="upload(this);">JS程式碼:window.upload = function(el){

AJAX檔案

function checkfile() { //formdata儲存非同步上傳資料 var formData = new FormData($('form')[0]); formData.append('file', $('

頭像自定義裁切, JCROP 選區,AJAX PHP GD庫裁切

AJAX 上傳圖片後,使用JCrop 外掛作為前端選區工具,實時預覽效果, 使用者上傳的頭像圖片尺寸過大時,程式會自動縮放到合理範圍,防止頁面被撐破。 沒有使用常見的 flash 方式,可以放心在 蘋果的 Mac Safari 上使用。 最終效果: 程式分析: 前端:

ajax 檔案 報錯 Warning: Cannot modify header information - headers already sent in Unknown on line 0

在使用ajax更新或上傳資料的時候,return回來的卻是一堆錯誤 後來才知道原來是PHP5.6有的功能已經廢棄了,所以我需要開啟PHP.ini檔案,找到 ;always_populate_raw_post_data = -1 將前面的分號去掉 always_popula

spring boot 下 ajax 檔案

jsp: <div class="modelFile fl"> <form method="POST" enctype="multipart/form-data" id="fileUploadForm"> <inpu