PHPAjaxJavaScript實現無重新整理附件上傳
對一個網站而言,有一個基本的不可缺少的功能,那就是檔案上傳。使用PHP預壓來實現檔案上傳可謂是有得天獨厚的優勢的,那麼今天,就一起來做一個關於無重新整理實現的檔案上傳吧。
普通表單
前端頁面
<form action="./fileupload.php" method="POST">
<p>Username<input type="text" name="username" /></p>
<p>Password<input type="password" name="password" /></p>
<p>E-mail<input type="text" name="email" /></p>
<input type="submit" value="Register" />
</form>
後臺處理
print_r($_POST);
$username = $_POSY[`username`];
$password = $_POST[`password`];
$email = $_POST[`email`];
// 在伺服器上和資料庫內容資訊對比即可,實現相關的業務邏輯。
···
帶有檔案的表單
帶有檔案的表單和普通表單是有很大的區別的,首先我們要在表單上宣告一個屬性,如下:
<form enctype=`multipart/form-data`>
來告訴伺服器,我們上傳的表單包含有檔案資訊。
重新整理方式
談到重新整理模式,也就是點選完submit之後,頁面跳轉到業務處理介面。這也是我們普通方式實現的表單的資料提交。
前端介面
<form action="./fileupload.php" enctype="multipart/form-data" method="post">
<p>Username<input type="text" name="username" /></p>
<p>Password<input type="password" name="password" /></p>
<p>E-mail<input type="text" name="email" /></p>
<p>Photo<input type="file" name="photo" /></p>
<input type="submit" value="Register" />
後臺頁面
後臺處理除了普通的表單資料之外,最重要的是處理檔案資訊。PHP內建了一個函式,可以方便的把上傳過來的檔案從臨時的資料區轉移到我們的目標資料夾,實現上傳的業務邏輯。
move_uploaded_file(`臨時檔案路徑`,`目標檔案路徑`);
無重新整理方式
使用無重新整理方式,與使用重新整理方式的唯一的區別就是阻止了頁面的跳轉,我們通常會有兩種方式來實現。
- 在表單提交事件的末尾加上return false。
<script>
var form = document.getElementsByTagName(`form`)[0];
form.onsubmit = function(){
// to do something
···
// 阻止頁面跳轉
return false;
}
</script>
- 使用h5相關方式。
<script>
var form = document.getElementsByTagName(`form`)[0];
form.onsubmit = function(event){
// to do something
···
// 阻止頁面跳轉
event.preventDefault();
}
</script>
其他的操作處理與帶跳轉的保持一致即可。
大檔案上傳
雖然PHP實現其檔案上傳很方便,也很快速。但是上傳檔案的大小並不是無限制的。預設來說,有兩個因素會限制我們上傳檔案的大小。
- post的極值
- upload的極值
我們可以通過手動的更改php.ini配置資訊來實現上傳檔案大小的控制。
POST極值
post_max_size = 200M
upload極值
upload_max_filesize=200M
上傳細節
ajax物件有一個叫upload的屬性,而且upload也作為一個物件而存在。其擁有一個叫onprogress的方法,我們可以通過監測這個方法,來檢視檔案上傳過程中的百分比。
前端頁面
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>檔案上傳示例</title>
<script>
window.onload = function(){
var form = document.getElementsByTagName("form")[0];
form.onsubmit = function(evt){
// 收集表單資訊
var fd = new FormData(form);
var ajax = new XMLHttpRequest();
// 給Ajax設定檔案上傳的感知事件
ajax.upload.onprogress = function(evt){
var loaded = evt.loaded;
var total = evt.total;
document.getElementById("progress").value =(loaded/total)*100;
}
ajax.onreadystatechange = function() {
if(ajax.readyState==4){
alert(ajax.responseText);
}
}
ajax.open(`post`,`./fileupload.php`);
ajax.send(fd);
// 阻止瀏覽器的跳轉
evt.preventDefault();
//return false;
}
}
</script>
</head>
<body>
<h2>無重新整理方式上傳附件</h2>
<form action="./fileupload.php">
<p>Username<input type="text" name="username" /></p>
<p>Password<input type="password" name="password" /></p>
<p>E-mail<input type="text" name="email" /></p>
<p>Photo<input type="file" name="photo" /></p>
<!--設定進度條-->
<style>
#parent {width:300px;height:34px;border:1px solid #033;}
#son {width:100%;height:10%;background-color:green}
progress {width:100%;height:34px;}
</style>
<div id="parent">
<div id="son">
<progress id="progress">
</div>
</div>
<input type="submit" value="Register" />
</form>
</body>
</html>
後臺處理
<?php
//print_r($_POST);
//echo "---------------------"."<BR>";
//print_r($_FILES);
// 附件的儲存位置、附件的名字,記得一定要存在upload資料夾
$path = "../upload/";
// 獲取檔案的原始名稱
$origin_name = $_FILES[`photo`][`name`];
// 拼接成該檔案在伺服器上的名稱
$server_name = $path.$origin_name;
if($_FILES[`photo`][`error`]>0) {
die("出錯了!".$_FILES[`photo`][`error`]);
}
if(move_uploaded_file($_FILES[`photo`][`tmp_name`],$server_name)){
echo "<BR>"."Upload Success!";
}else{
echo "<BR>"."Upload Failed!".$_FILES[`photo`][`error`];
}
?>
記得保證upload資料夾的存在性以及路徑問題。
總結
檔案上傳是一個很基礎的功能,實現起來也不是很複雜。但是這個功能卻又是那麼的重要,我們可以方便的通過檔案上傳來配合修改使用者的諸如頭像,以及其他檔案資訊。
相關文章
- 實戰|如何使用雲開發實現照片附件上傳開發
- laravel 上傳附件-不是圖片--Laravel
- hdwiki 附件上傳大小設定
- SpringBoot系列——附件管理:整合業務表單實現上傳、回顯、下載Spring Boot
- 如何讓SAP C4C自定義BO實現附件上傳的功能
- SAP MM 給合同的ITEM上傳附件以及附件查詢
- 如何實現無感重新整理 Token
- 微附件無法正常使用被封公眾號文章上傳檔案解決辦法(微附件官方解釋)
- jquery ajax file upload NET MVC 無重新整理檔案上傳jQueryMVC
- vxe-upload 上傳附件顯示進度
- 重新整理檔案上傳
- 公眾號如何上傳檔案,公眾號文章上傳附件教程(簡單實用2023最新)
- vxe-table 使用 vxe-upload 在表格中實現非常強大的貼上上傳圖片和附件
- 小鳥雲虛擬主機Wordpress上傳中文附件出現亂碼
- Dynamics CRM中自定義頁面實現附件管理包含下載模板、上傳、下載、刪除
- PbootCMS後臺上傳附件報錯UNKNOW: Code: 8192boot
- PbootCMS附件上傳報錯UNKNOW: Code: 8192; Desc: stripos()boot
- 封裝一個簡易的上傳附件方法封裝
- vue3 實現無感重新整理tokenVue
- 前端如何實現token的無感重新整理前端
- 如何讓你的SAP CRM應用支援附件上傳
- 如何實現上拉載入,下拉重新整理?
- Flutter 實現下拉重新整理&上拉載入Flutter
- vue 實現貼上上傳圖片Vue
- ajax實現檔案上傳
- js實現帶上傳進度的檔案上傳JS
- PbootCMS附件上傳失敗報錯UNKNOW: Code: 8192; Desc: stripos():boot
- [file-manager] 分享一個附件上傳管理擴充套件套件
- JavaScript魔法:線上Excel附件上傳與下載的完美解決方案JavaScriptExcel
- python實現郵件接收、附件下載Python
- Spring mvc檔案上傳實現SpringMVC
- HttpFileCollection 實現多檔案上傳HTTP
- iView Upload 實現手動上傳View
- formData原生實現圖片上傳ORM
- 檔案上傳原理和實現
- 使用Spring實現上傳檔案Spring
- PHP實現單檔案、多檔案上傳 封裝 物件導向實現檔案上傳PHP封裝物件
- 使用java的MultipartFile實現layui官網檔案上傳實現全部示例,java檔案上傳JavaUI
- Teamcenter 流程配置實現《部分發布功能附件》