原生JavaScript+PHP多圖上傳實(shí)現(xiàn)示例
摘要
很多場(chǎng)景下需要選擇多張圖片上傳,或者是批量上傳以提高效率,多圖上傳的需求自然就比較多了,本文使用最簡(jiǎn)單的XMLHttpRequest異步上傳圖片。
界面

上傳示例

index.html
<!DOCTYPE html>
<html>
<head>
<title>多圖上傳</title>
<meta charset="utf-8">
<style>
#fileInput{
width: 500px;
height: 45px;
margin: 50px auto 0;
background: #eee;
display: block;
padding: 20px 20px;
border-radius: 20px;
}
#previewContainer{
width: 500px;
margin: 10px auto;
background: #eee;
padding: 20px 20px;
display: none;
}
.preview-image {
max-width: 200px;
max-height: 200px;
margin-bottom: 10px;
}
</style>
</head>
<body>
<!--選擇文件-->
<input type="file" id="fileInput" accept="image/*" multiple>
<div id="previewContainer"></div>
<script>
const fileInput = document.getElementById('fileInput');
const previewContainer = document.getElementById('previewContainer');
// 監(jiān)聽(tīng)選擇文件
fileInput.addEventListener('change', handleFileSelect);
function handleFileSelect(event) {
const files = event.target.files;
for (let i = 0; i < files.length; i++) {
const file = files[i];
const reader = new FileReader();
reader.onload = function(event) {
const image = document.createElement('img');
image.className = 'preview-image';
image.src = event.target.result;
previewContainer.appendChild(image);
// 將文件上傳至服務(wù)器
uploadImage(file);
}
reader.readAsDataURL(file);
}
}
// 將文件上傳至服務(wù)器
function uploadImage(file) {
const xhr = new XMLHttpRequest();
const formData = new FormData();
// 將文件添加到formData對(duì)象
formData.append('image', file);
// 設(shè)置XHR請(qǐng)求的處理函數(shù)
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 200) {
console.log('上傳成功');
// 顯示圖片預(yù)覽區(qū)域
document.querySelector('#previewContainer').setAttribute('style', 'display:block');
// 打印JSON
console.log(JSON.parse(xhr.response))
} else {
console.log('上傳失敗');
}
}
}
// 發(fā)送POST請(qǐng)求到服務(wù)器
xhr.open('POST', 'upload.php', true);
xhr.send(formData);
}
</script>
</body>
</html>upload.php
(請(qǐng)建立一個(gè)upload文件夾以存放上傳的文件)
<?php
// 編碼
header("Content-type:application/json");
// 檢查是否有文件上傳
if (isset($_FILES['image'])) {
// 獲取上傳的文件信息
$file = $_FILES['image'];
// 獲取文件名
$fileName = $file['name'];
// 獲取文件的臨時(shí)路徑
$tmpFilePath = $file['tmp_name'];
// 指定保存目錄
$uploadDir = 'upload/';
// 驗(yàn)證是否為圖片文件
if ((($_FILES["image"]["type"] == "image/gif")
|| ($_FILES["image"]["type"] == "image/jpeg")
|| ($_FILES["image"]["type"] == "image/jpg")
|| ($_FILES["image"]["type"] == "image/pjpeg")
|| ($_FILES["image"]["type"] == "image/x-png")
|| ($_FILES["image"]["type"] == "image/png"))
&& ($_FILES["image"]["size"] < 10485760)){
// 生成唯一的文件名
$uniqueFileName = uniqid() . '_' . $fileName;
// 拼接保存路徑
$uploadPath = $uploadDir . $uniqueFileName;
// 獲取HTTP協(xié)議
function get_http_type(){
$http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
return $http_type;
}
// 將臨時(shí)文件移動(dòng)到目標(biāo)路徑
if (move_uploaded_file($tmpFilePath, $uploadPath)) {
// 上傳成功
// 可以在此處進(jìn)行進(jìn)一步處理,比如生成縮略圖、添加水印等
$result = array(
'code' => 200,
'msg' => '上傳成功',
'url' => get_http_type().dirname($_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']).'/'.$uploadPath
);
} else {
// 上傳失敗
$result = array(
'code' => 202,
'msg' => '文件上傳失敗'
);
}
}else{
// 不合規(guī)的文件
$result = array(
'code' => 202,
'msg' => '不合規(guī)的文件'
);
}
} else {
// 沒(méi)有文件上傳
$result = array(
'code' => 202,
'msg' => '沒(méi)有選擇要上傳的文件'
);
}
// JSON
echo json_encode($result, JSON_UNESCAPED_UNICODE);
?>以上就是原生JavaScript+PHP多圖上傳實(shí)現(xiàn)示例的詳細(xì)內(nèi)容,更多關(guān)于原生JavaScript PHP多圖上傳的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
PHP使用mysqli操作MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單方法
下面小編就為大家?guī)?lái)一篇PHP使用mysqli操作MySQL數(shù)據(jù)庫(kù)的簡(jiǎn)單方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
php mailer類調(diào)用遠(yuǎn)程SMTP服務(wù)器發(fā)送郵件實(shí)現(xiàn)方法
這篇文章主要介紹了php mailer類調(diào)用遠(yuǎn)程SMTP服務(wù)器發(fā)送郵件實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了php mailer類的調(diào)用及郵件發(fā)送相關(guān)技巧,需要的朋友可以參考下2016-03-03
jquery+php+ajax顯示上傳進(jìn)度的多圖片上傳并生成縮略圖代碼
這篇文章主要介紹了jquery+php+ajax顯示上傳進(jìn)度的多圖片上傳并生成縮略圖代碼,可實(shí)現(xiàn)帶有進(jìn)度條效果的多圖上傳功能與生成縮略圖功能,是web開(kāi)發(fā)中非常實(shí)用的技巧,需要的朋友可以參考下2014-10-10
使用php實(shí)現(xiàn)快錢支付功能(涉及到接口)
本篇文章是對(duì)使用php實(shí)現(xiàn)快錢支付功能的代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-07-07
php面向?qū)ο?一) 初窺(php面向?qū)ο蠡A(chǔ)介紹)
這篇文章主要介紹了php面向?qū)ο蟮囊恍┲R(shí),需要的朋友可以參考下2017-08-08
php+Ajax無(wú)刷新驗(yàn)證用戶名操作實(shí)例詳解
這篇文章主要介紹了php+Ajax無(wú)刷新驗(yàn)證用戶名操作,簡(jiǎn)單介紹了ajax的原理并結(jié)合實(shí)例形式分析了php結(jié)合ajax無(wú)刷新驗(yàn)證用戶名相關(guān)操作技巧,需要的朋友可以參考下2019-03-03
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的區(qū)別
一直以來(lái),有很多初學(xué)者搞不懂這些Mysql中從查詢結(jié)果集中取得數(shù)據(jù)的函數(shù)之間有什么區(qū)別,今天我就來(lái)秀一把,在秀之前先給大家一段PHP實(shí)例2009-04-04

