js 实现文件上传 php,JS+php后台实现文件上传功能详解
本文實例講述了JS+php后臺實現(xiàn)文件上傳功能。分享給大家供大家參考,具體如下:
一、利用 FormData 對象形式上傳
FormData 是 XMLHttpRequest 2 的產(chǎn)物,兼容 IE10+。
FormData 對象,可以把form中所有表單元素的name與value組成一個queryString,提交到后臺。在使用Ajax提交時,使用FormData對象可以減少拼接queryString的工作量。
使用 FormData 對象
1.取得form對象,作為參數(shù)傳入到FormData對象
html:
js:
var form = document.getElementById('form1');
var formdata = new FormData(form);
2.創(chuàng)建一個FormData空對象,然后使用append方法添加key/value
var formdata = new FormData();
formdata.append('name','fdipzone');
formdata.append('gender','male');
使用FormData提交表單及上傳文件實例:
實例1
一般項目中使用的點擊上傳文件的按鈕跟 默認樣式是不一樣的,我們得自定義。方法是,自己寫一個 按鈕,然后再寫一個 (這個要隱藏,太難看),點擊 的時候出發(fā) 的 click 事件。
HTML:
:style="{display: 'none'}"
ref="input" @change="selectedFile"
/>
上傳
JS:
methods: {
triggerSelect () {
this.$refs.input.click()
},
selectedFile (e) {
console.log(e.target.files[0])
//根據(jù)項目需求做具體處理,比如說獲取文件名
},
async upload () {
//如果不需要用到上傳后的返回值可以把 async...await 語法去掉
let files = this.$refs.input.files;
if(files.length > 0) {
let form = new FormData();
form.append('file', files[0])
let data = await new Promise((resolve, reject) => {
axios({
url: '',
method: 'post',
data: form
})
.then(res => {
resolve(res)
})
.catch(err => {
reject(err)
})
})
}
}
}
實例2
FormData Demoname:
gender:male female
photo:
function fsubmit(){
var data = new FormData($('#form1')[0]);
$.ajax({
url: 'server.php',
type: 'POST',
data: data,
dataType: 'JSON',
cache: false,
processData: false, //不處理發(fā)送的數(shù)據(jù),因為data值是FormData對象,不需要對數(shù)據(jù)做處理
contentType: false //不設置Content-type請求頭
}).done(function(ret){
if(ret['isSuccess']){
var result = '';
result += 'name=' + ret['name'] + '
';
result += 'gender=' + ret['gender'] + '
';
result += '';
$('#result').html(result);
}else{
alert('提交失敗');
}
});
return false;
}
server.php
$name = isset($_POST['name'])? $_POST['name'] : '';
$gender = isset($_POST['gender'])? $_POST['gender'] : '';
$filename = time().substr($_FILES['photo']['name'], strrpos($_FILES['photo']['name'],'.'));
$response = array();
if(move_uploaded_file($_FILES['photo']['tmp_name'], $filename)){
$response['isSuccess'] = true;
$response['name'] = $name;
$response['gender'] = $gender;
$response['photo'] = $filename;
}else{
$response['isSuccess'] = false;
}
echo json_encode($response);
?>
帶顯示圖片的上傳圖片
// -------- 將以base64的圖片url數(shù)據(jù)轉(zhuǎn)換為Blob --------
function convertBase64UrlToBlob(urlData, filetype){
//去掉url的頭,并轉(zhuǎn)換為byte
var bytes = window.atob(urlData.split(',')[1]);
//處理異常,將ascii碼小于0的轉(zhuǎn)換為大于0
var ab = new ArrayBuffer(bytes.length);
var ia = new Uint8Array(ab);
var i;
for (i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i);
}
return new Blob([ab], {type : filetype});
}
$input.on('change', function (e) {
var input = $input.get(0);
var files = input.files || [];
if (files.length === 0) {
return;
}
console.log('選中 ' + files.length + ' 個文件');
// 遍歷選中的文件,預覽、上傳
$.each(files, function (key, file) {
var filename = file.name || '';
var fileType = file.type || '';
var reader = new FileReader();
// onload事件
reader.onload = function (e) {
var base64 = e.target.result || this.result;
var formData = new FormData();
formData.append("upload_file", convertBase64UrlToBlob(base64, fileType), filename);
var xhr = new XMLHttpRequest();
// 開始上傳
xhr.open('POST', uploadImgUrl, true);
// 發(fā)送數(shù)據(jù)
xhr.send(formData);
});
reader.readAsDataURL(file);
});
});
二、base64 字符串方式上傳圖片
base64 在線轉(zhuǎn)換網(wǎng)站:http://tools.jb51.net/transcoding/img2base64
DataURI 允許在HTML文檔中嵌入小文件,可以使用 img 標簽或 CSS 嵌入轉(zhuǎn)換后的 Base64 編碼,減少 HTTP 請求,加快小圖像的加載時間。 經(jīng)過Base64 編碼后的文件體積一般比源文件大 30% 左右。
Base64 在CSS中的使用:
.box{
background-image: url("data:image/jpg;base64,/9j/4QMZR...");
}
Base64 在HTML中的使用:
(不推薦用base64,效率慢,消耗流量,占用空間。推薦使用把base64圖片格式轉(zhuǎn)換成FormData形式傳遞)
更多關于JavaScript相關內(nèi)容感興趣的讀者可查看本站專題:《JavaScript表單(form)操作技巧大全》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript錯誤與調(diào)試技巧總結(jié)》及《JavaScript數(shù)學運算用法總結(jié)》
希望本文所述對大家JavaScript程序設計有所幫助。
總結(jié)
以上是生活随笔為你收集整理的js 实现文件上传 php,JS+php后台实现文件上传功能详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 游戏服务器开发
- 下一篇: php openssl 处理pkcs8,