1. 程式人生 > >vue 檔案上傳及預覽

vue 檔案上傳及預覽

<template>

<div id="file">

 

<input name="files" id="uploaderInput" type="file" accept="images/*" multiple @change="change"/>

<div class="file_upload">

<div class="progress"></div>

</div>


 

<div class="img_holder"></div>

</div>

</template>

<script>

export default {

name: "file",

methods: {

change(E) {

//獲取到獲取的圖片列表 (選擇多張)

let file = event.target.files[0];

//獲取到獲取的圖片列表 (選擇一張)

//let img1 = event.target.files[0];

//let reader = new FileReader();

 

//console.log($("#uploaderInput")[0].files);

//console.log(img1);

//let type = file.type; //檔案的型別,判斷是否是圖片

//let size = file.size; //檔案的大小,判斷圖片的大小

 

var reader = new FileReader(); //新建FileReader物件

reader.readAsDataURL(file); //讀取為base64

//以下程式碼可以刪除

reader.onloadstart = function() {

console.log("start"); //開始讀取

};

 

//程式碼進度條

reader.onprogress = function(e) {

//這個是定時觸發的事件,檔案較大的時候較明顯

//console.log(e)

var p = "已完成:" + Math.round(e.loaded / e.total * 100) + "%";

$(".file_upload")

.find(".progress")

.html(p);

console.log("uploading"); //檔案較大,就會出現多個uploading

};

reader.onabort = function() {

console.log("abort"); //用作取消上傳功能

};

reader.onerror = function() {

console.log("error"); //檔案讀取出錯的時候觸發,暫模擬不出

};

//成功後 獲取檔案url

reader.onload = function(e) {

console.log("load complete"); //完成

console.log(e);

let res = e.target.result.split(";"); //擷取 data:; base64 轉換後預設會有data屬性判斷檔案格式;分為兩段,前段為data,後端為檔案base64編碼

 

if (res[0] != "data:application/apk;") {

// 不同瀏覽器會有不一樣的解析;so 這一步單獨處理

_this.apk.app = "data:application/apk;" + res[1];

} else {

_this.apk.app = e.target.result;

}

 

console.log(_this.apk.app)

};

//預覽程式碼

reader.onloadend = function(e) {

var dataURL = reader.result,

image = '<img src="' + dataURL + '"/>', //預覽圖片

text = '<span>"' + dataURL + '"</span>'; //測試預覽text

var name = file.name,

size = Math.round(file.size / 1024);

 

var div = "<p>Name: " + name + "</p><p>Size: " + size + "kb</p>";

var imglist =

'<div class="img_box"><span class="delete">X</span>' +

image +

div +

"</div>";

$(".img_holder").html(imglist);

};

 

// if (this.imgData.accept.indexOf(type) == -1) {

// alert("請選擇我們支援的圖片格式!");

// return false;

// }

// if (size > 3145728) {

// alert("請選擇3M以內的圖片!");

// return false;

// }

}

}

};

</script>