1. 程式人生 > >用vue儲存上傳的圖片檔案物件

用vue儲存上傳的圖片檔案物件

 HTML頁面:

<table class="form" id="form">
    ...略
    <tr>
    <td class="formTitle">頭像圖片</td>
    <td class="formValue">
        <input class="change" type="file" @change="handleFileChange" ref="inputer" isvalid="yes"/>
    </td>
    </tr>
    <tr>
        <td></td>
        <td id="showHptPic">
        <!-- 置入預設頭像,如果有上傳過頭像,則顯示自己的頭像圖片 -->
        <img id='pic' src='/images/touxiang-default_icon.png'>
        </td>
    </tr>
    ...略
</table>

 表單裡選擇圖片檔案,並預覽,表單填完後和其他資訊一起點確認,提交,提交方法在vue裡

JS檔案:

//只貼出關鍵程式碼
var vm = new Vue({
    el:'#dpLTE',
    data: {
        UploadFile: {
            file: null,//儲存從html傳來的圖片檔案
            relatedId:null,//資料庫中與外表連線的Id
            relatedType:1 //1型別 為上傳頭像圖片
        }
    },
    methods : {
            //選擇檔案後,預覽圖片
        handleFileChange (e) {
            let inputDOM = this.$refs.inputer;
            // 通過DOM取檔案資料
            this.UploadFile.file = inputDOM.files[0];
            var objUrl = this.getObjectURL(this.UploadFile.file) ; //獲取圖片的路徑,該路徑不是圖片在本地的路徑
            if (objUrl) {
                $("#pic").attr("src", objUrl) ; //將圖片路徑存入src中,預覽出圖片
            }
        },

 //建立一個可存取到該file的url
        getObjectURL(file) {
            var url = null ;
            if (window.createObjectURL!=undefined) { // basic
                url = window.createObjectURL(file) ;
            } else if (window.URL!=undefined) { // mozilla(firefox)
                url = window.URL.createObjectURL(file) ;
            } else if (window.webkitURL!=undefined) { // webkit or chrome
                url = window.webkitURL.createObjectURL(file) ;
            }
            return url ;
        },
    acceptClick: function() {
        //圖片檔案不為空時,上傳圖片
        if(vm.UploadFile.file!=null && vm.UploadFile.relatedId!=null){
        //這裡也是搞了我很久,引數傳不過去,查了很久才知道:攜檔案和屬性傳參需要使用formData
		var formData = new FormData();
		formData.append('file',vm.UploadFile.file);
		formData.append('relatedType',vm.UploadFile.relatedType);
		formData.append('relatedId',vm.UploadFile.relatedId);
		$.ajax({
			url :  '../../public/uploadFile/upload?_' + $.now(),
			type : "post",
			processData : false,//告訴jQuery不要去處理髮送的資料 
			contentType : false,// 告訴jQuery不要去設定Content-Type請求頭
			data :formData,
			success: function(){
				console.log("上傳頭像成功!");
			}
		});
    }
})

1)首先選擇檔案後會觸發  handleFileChange (e)  方法,通過給img的src賦值,來預覽你選中的圖片檔案

2)點選確定的時候,先驗證檔案是否已選擇、和外來鍵關聯的Id是否為空(我這的id可以理解為user表的id,與之對應的relatedId),如果未選中檔案或者id為空,則不上傳檔案只儲存表單填寫的其他資訊

3)new一個formData,用來儲存上傳的檔案file(file型別)、檔案型別relatedType(int型別)、外來鍵關聯Id  relatedId(String型別),然後用ajax把資料一起丟給controller的upload方法,儲存到資料庫,

存這個檔案的相對路徑:uploads/xxx001.jpg

                         檔名:xxx.jpg

                     檔案型別:1(1為頭像)

                         外來鍵Id:1(user表id為1的使用者)

還可以存上傳時間、備註、圖片型別啊啥的...

 

注意不要漏寫processData : false,//告訴jQuery不要去處理髮送的資料 
                     contentType : false,// 告訴jQuery不要去設定Content-Type請求頭

否則會報錯或者接收不到傳過去的值

 

emmmm,直接丟到大牛寫好的工具裡,上傳成功!

方法名:

@RequestMapping(value="upload" ,method=RequestMethod.POST)
public JSONObject upload(HttpServletRequest request, HttpServletResponse response, MultipartFile file, int relatedType, String relatedId){