H5標籤input標籤上傳檔案(一)
之前專案做檔案上傳(本篇著重講純圖片上傳)的時候,一般都是用的flash外掛。
H5的input標籤提供了type=file的檔案上傳功能,那麼如何用這個標籤實現前後端之間的檔案上傳呢。
百度了一下,一個能用的都沒有,都有BUG,講的也很複雜,好氣喔,自己寫吧!
先看部分程式碼:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>H5input標籤上傳檔案</title>
<script type="text/javascript" src="jquery.min.js"></script>
</head>
<body>
<input type="file" name="image" accept="image/*" onchange="uploadImg()">
<script type="text/javascript">
function uploadImg(event) {
var e=window.event||event;
// 獲取當前選中的檔案
var oFile = e.target.files[0];
console.log(oFile);//列印值看下面圖片,簡單點的話我們直接把這個資料給後臺處理就可以了
//接下來按照跟後臺約定好的進行資料互動就可以-不使用jq的話這裡有一些細節,稍後解釋
$.post("約定好的url地址",oFile,function(result){
console.log(result);
})
}
</script>
</body>
</html>
上面console.log(oFile);
這一行程式碼列印的結果如下:
簡單點,寫部落格的方式簡單點,不要為了顯擺自己的技術寫一堆API文件都可以查到的東西。
這裡給想深入瞭解的H5上傳的同學三個相關的知識連結(沒錯,MDN上的API描述):
FormData
FileReader()
Blob()
上面只是一個簡陋的方案(但完全可用),接下來讓我們完善一下!
既然做的是單張圖片上傳功能,這裡我在input標籤上加了一個accept="image/*"
做了一個基本的型別限制,這樣你在選擇檔案的時候你會發現你能選擇檔案型別是圖片檔案。
我們可以自定義可上傳的檔案型別,用如下方式指定多種型別:
<input type="file" accept=".doc,.docx,.pdf,.txt,.htm,.html" />
但是這並不能防止使用者的惡意操作(主要是堵住測試和後臺的嘴,☺),另外就算是選擇型別是圖片的話,其實還是可以選擇少部分其它格式例如.zip。
利用之前給展示過的oFile列印結果中的type
欄位
// 檢查上傳檔案型別--新增到傳送資料之前
if(['jpeg', 'png', 'gif', 'jpg'].indexOf(oFile.type.split("/")[1]) < 0) {
// alert太ugly了,用你們系統的報錯彈窗就行(如果有)
alert("上傳的檔案必須是圖片格式");
return;
}
好,圖片的格式算是限制了,數組裡面沒涉及到的格式你自己往裡面加。
額外補充一點,你會發現當我要做上傳所有型別的檔案時,通過oFile.type
去判斷檔案型別好像有點問題,那麼這裡我提供一個穩妥的辦法,我們通過oFile.name
去判斷,程式碼如下:
// 限制檔案型別
var fileType = oFile.name.substr(oFile.name.lastIndexOf(".")+1);
if (['doc', 'docx', 'pdf', 'txt', 'htm', 'html'].indexOf(fileType) < 0) {
alert("只支援.doc .docx .pdf .txt .htm .html格式檔案");
return;
}
上傳檔案的大小也限制一下,前端做限制很簡單,利用之前oFile列印結果中的size
欄位,這裡API給我們返回的是所選檔案的位元組數,1KB=1024位元組,1MB=1024KB。利用以上,我們加個判斷:
var imgMaxSize = 1024 * 1024 * 4; // 4MB圖片的位元組數
if(oFile.size>imgMaxSize){
alert("您可上傳檔案的最大限制為4MB");
return;
}
如果你用的是jquery.ajax,並且你上傳的是文件檔案,可能ajax會對你的檔案進行預處理,然後你就可能遇到如下錯誤:
Illegal invocation
這時候我們在ajax裡面配置一下選項processData:false
, 關掉jquery的預處理就行了,一般這種問題多發生在文件檔案上。
$.ajax({
type:'POST',
url:url,
data:formData,
contentType:undefined,
processData:false,
success:function(data){}
});
還有一些東西,例如圖片上傳前壓縮啊什麼的,不想寫長篇,這裡先不講了,在這裡放一個簡單完整版的程式碼,方便我自己以後copy,你們要用自己拿,別客氣!
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>H5-input標籤上傳檔案</title>
<script type="text/javascript" src="jquery.min.js"></script>
</head>
<body>
<input type="file" accept="image/*" onchange="uploadImg()">
<script type="text/javascript">
function uploadImg(event) {
var e = window.event || event;
var oFile = e.target.files[0];
//console.log(oFile);
var imgMaxSize = 1024 * 1024 * 4; //4MB
// 限制檔案型別
if(['jpeg', 'png', 'gif', 'jpg'].indexOf(oFile.type.split("/")[1]) < 0) {
alert("僅可以上傳圖片格式檔案");
return;
}
//限制大小
if(oFile.size > imgMaxSize) {
alert("檔案最大為4MB");
return;
}
var data=new FormData();
data.append("filesData",file);//這裡不管怎樣,我決定還是用formdata的方式上傳。
$.post("約定地址",data,function(result){
console.log(result);
})
}
</script>
</body>
</html>
相關推薦
H5標籤input標籤上傳檔案(一)
之前專案做檔案上傳(本篇著重講純圖片上傳)的時候,一般都是用的flash外掛。 H5的input標籤提供了type=file的檔案上傳功能,那麼如何用這個標籤實現前後端之間的檔案上傳呢。 百度了一下,一個能用的都沒有,都有BUG,講的也很複雜,好氣喔,自己寫
使用form表單上傳檔案(一)
今天在專案中要寫一個上傳檔案的功能,使用jsp中的form表單的形式完成。 首先新建一個jsp,使用最原始的form表單來完成。 jsp中的程式碼如下,很簡單: <form method="post" action="<%=ermDomainUrl %>
springboot/springmvc上傳檔案(CommonsMultipartResolver)
上一篇博文講到了(Servlet3.0支援)的檔案上傳:https://blog.csdn.net/frozenpower/article/details/81141297 這篇我們來看可配置的檔案上傳解析器CommonsMultipartResolver CommonsMultipartR
angularjs手機webapp 利用input拍照,相簿選擇、縮圖顯示 上傳圖片(一)
執行後的截圖: html程式碼 <ul class="list_img"> <li ng-repeat="imageSrc in imgshows track by $index"> <img n
SpringMVC上傳檔案(圖片)並儲存到本地
SpringMVC上傳檔案(圖片)並儲存到本地 小記一波~ 基本的MVC配置就不展示了,這裡給出核心程式碼 在spring-mvc的配置檔案中寫入如下配置 <bean id="multipartResolver" class="org.springframewor
國慶七篇-----struts2的檔案上傳下載(一)
struts2提供了檔案的上傳下載功能,不過需要我們對其提供相關的檔案引數。 比如檔案上傳,必須提供三種屬性,並對其提供setter和getter方法,而且必須按照以下規範命名: private File XXX; private String XXXFi
使用表單上傳檔案(二)
先寫一個簡單的表單,根據上一篇文章說的步驟進行 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCT
commons-fileupload上傳檔案(圖片)時路徑寫入資料庫時斜槓的問題
前端:常規的二進位制form表單,這裡不贅述了。 後端:常規的Java servlet處理資料。其關鍵的程式碼如下: String _today = new SimpleDateFormat("yyyyMMdd") .format(new java.util.Date
一鍵jquery非同步上傳檔案(圖片)的實現(檔案上傳進度讀取未做)
本文采用boostrap、、jquery、jade(html的一種模板)、nodejs實現 最終實現的效果:一個按鈕在選擇完檔案後,自動上傳到後臺; -改變input樣式 在form表單中,用<a>包裹<input type="file">,讓i
springmvc上傳檔案(圖片)
環境:springmvc+spring+mybatis 前提環境,需要把ssm框架搭建好,如果沒有搭建的話可以先搭建這個框架 然後需要新增jar包 pom裡面新增 <!-- 上傳元件 --> <!-- https://mvnre
js上傳檔案(圖片)限制格式及大小為3M · 觀止
如果你想快速解決這個問題,看本文就夠了。查了好多資料,終於解決了,太耗時間了,本文留給給後來者,希望你們工作的更輕鬆 本文儲存為.html檔案用瀏覽器開啟即可測試功能 <form id="fo
js上傳檔案(圖片)限制格式及大小
如果你想快速解決這個問題,看本文就夠了。查了好多資料,終於解決了,太耗時間了,本文留給給後來者,希望你們工作的更輕鬆 本文儲存為.html檔案用瀏覽器開啟即可測試功能 <form id="form1" name="form1" method="post" actio
Cisco 路由器上傳IOS(一)
log 技術分享 fff 分享 進行 剩余空間 ftp服務 delete cisco 路由器 (1)路由器上查看IOS。 通過dir flash: 命令查看IOS版本,flash的空間大小及剩余量。如果剩余空間不夠上傳新的IOS時候,上傳的時候會報錯。此時需刪掉原來的IOS
上傳漏洞(一)
漏洞 內容 如果 訪問 nbsp 文件中 一個 6.0 我們 解析漏洞 (1)IIS解析漏洞 ①當建立一個*.asa、*.asp格式的文件夾時,這個文件夾裏的任意文件都會被當做asp文件來執行。 如果我們上傳一個txt文件,文件內容是asp一句話木馬,一句話木馬將會被解析,
wangEditor的使用及上傳圖片(一)
由於業務需要,最近新入手了一款富文字編輯器wangEditor,這是一款輕量級的富文字編輯器,比起百度的ueditor,這款編輯器的介面更加簡單,文件也很詳細。對於需求不是很高的功能來說,這款編輯器實在是不二之選。 一、wangEditor的基
Vue + Canvas 實現頭像截圖上傳功能(一)
此文共分為兩篇,上篇主要是展示最終的效果,下篇為程式碼實現部分。 首先,上圖看最終的製作效果。 這是選擇圖片前: 這是選擇圖片後: 主要需求有這幾點:
Ajax 上傳檔案(input file FormData)
FormData物件用以將資料編譯成鍵值對,以便用XMLHttpRequest來發送資料。其主要用於傳送表單資料,但亦可用於傳送帶鍵資料(keyed data),而獨立於表單使用。 jQuery Ajax 上傳檔案 通過 Ajax 向後臺傳送檔案(包括圖片)時,其引數型別屬於物件。可以建立一個 FormD
用form表單input type="file"上傳檔案(提交前判斷)
1、用/jquery.form.js上傳檔案,提交前判斷是否選擇了檔案(之前很糾結判斷問題,寫在beforeSend裡面不管什麼情況都會提交) 2、用ajax接收資訊 3、優化提交按鈕樣式 HTML頁面程式碼: <script src="/JS/jquery.fo
ASP 使用 jQuery Ajax File Uploader外掛上傳檔案(適用於支援H5的瀏覽器)
開篇先吐個槽:自從公司策略調整以後,幾乎沒有什麼3D、AR、VR的專案讓我來做了~於是···為了避免被認為無所事事, 只好硬著頭皮開始做ASP的專案了~~好在大家用的都是C# ┐(´∀`)┌ 迴歸正題,當前接手的ASP專案是執行在微信平臺的一個上傳視訊投票的小專案,裡面
input file實現多次上傳檔案(不會覆蓋上次上傳的檔案)
html原生的file多選控制元件:<input class="className" type="file" name="name" accept="image/*" multiple /> 存在問題:第一次選擇了n個檔案,第二次選中m個檔案,第二次選擇結束