spring mvc+localResizeIMG實(shí)現(xiàn)HTML5端圖片壓縮上傳
最近在做一個(gè)移動(dòng)端HTML5的應(yīng)用,使用到了上傳功能,起初使用傳統(tǒng)的上傳方式上傳手機(jī)拍照的照片,由于手機(jī)拍照出來(lái)的照片一般都是好幾MB,所以上傳速度是非常慢的。
在網(wǎng)上找了很久找到了localResizeIMG壓縮框架,感覺(jué)非常的實(shí)用,所以在此分享給大家。
第一步:下載localResizeIMG
localResizeIMG放在github中的,地址是:https://github.com/think2011/localResizeIMG。
第二步:在web工程中導(dǎo)入localResizeIMG相關(guān)js
解壓localResizeIMG壓縮吧,把目錄中的dist文件夾拷貝到工程中,我的是放在js目錄下。
然后在自己的js中導(dǎo)入jquery和localResizeIMG的js。如:
<script src="<c:url value="/js/JQuery/jquery-1.10.0.min.js"/>"></script> <script type="text/javascript" src="<c:url value="/js/lrz/dist/lrz.bundle.js"/>"></script>
第三步:在自己的上傳的input的file框加入onchange事件如下代碼
<input type="file" id="payfile" name="myfile" style="display:none;" onchange="fileChange(this)" />
在fileChange方法中實(shí)現(xiàn)代碼的壓縮和對(duì)壓縮后生成的base64異步傳到后臺(tái)
function fileChange(that){
var filepath=$(that).val();
if(filepath=="")
{
return;
}
var extStart=filepath.lastIndexOf(".");
var ext=filepath.substring(extStart,filepath.length).toUpperCase();
if(".jpg|.png|.bmp|.jpeg".toUpperCase().indexOf(ext.toUpperCase())==-1){
alert("只允許上傳jpg、png、bmp、jpeg格式的圖片");
return false;
}
//以圖片寬度為800進(jìn)行壓縮
lrz(that.files[0], {
width: 800
})
.then(function (rst) {
//壓縮后異步上傳
$.ajax({
url : "<%=request.getContextPath()%>/common/fileUploadPicture",
type: "POST",
data : {
imgdata:rst.base64//壓縮后的base值
},
dataType:"json",
cache:false,
async:false,
success : function(data) {
if(data.success)
{
alert(data.message);///data.message為上傳成功后的文件路徑
}else{
alert(data.message);///data.message為上傳失敗原因
}
},
error : function(){
alert("上傳失敗");
}
});
});
}
第四步:spring mvc controller 后臺(tái)接收base值并解析并保存文件
import sun.misc.BASE64Decoder;//導(dǎo)入的base64的類
/**
* 文件上傳
*/
@ResponseBody
@RequestMapping("common/fileUploadPicture")
public Object fileUploadPicture(String imgdata, HttpServletRequest request) {
LOGGER.info("[文件上傳(fileUploadPicture)][params:imgdata=" + imgdata + "]");
BASE64Decoder decoder = new BASE64Decoder();
try {
String basePath = request.getRealPath("/upload_files");
string imgPath=basePath+"/test.jpg";
// new一個(gè)文件對(duì)象用來(lái)保存圖片,默認(rèn)保存當(dāng)前工程根目錄
File imageFile = new File(imgPath);
// 創(chuàng)建輸出流
FileOutputStream outputStream = new FileOutputStream(imageFile);
// 獲得一個(gè)圖片文件流,我這里是從flex中傳過(guò)來(lái)的
byte[] result = decoder.decodeBuffer(imgdata.split(",")[1]);//解碼
for (int i = 0; i < result.length; ++i) {
if (result[i] < 0) {// 調(diào)整異常數(shù)據(jù)
result[i] += 256;
}
}
outputStream.write(result);
return new Result(true, imgPath);
} catch (AppException e1) {
LOGGER.error("[文件上傳(fileUpload)-fastdfs][errors:" + e1 + "]");
return new Result(false, "文件上傳失敗");
} catch (Exception e) {
LOGGER.error("[文件上傳(fileUpload)][errors:" + e + "]");
return new Result(false, "文件上傳失敗");
}finally{
outputStream.flush();
outputStream.close();
}
}
Result類:
import java.io.Serializable;
public class Result implements Serializable{
private static final long serialVersionUID = 1L;
private boolean success;
private String message;
public Result() {
success = true;
}
public Result(boolean success, String message) {
this.success = success;
this.message = message;
}
public boolean isSuccess() {
return success;
}
public void setSuccess(boolean success) {
this.success = success;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
@Override
public String toString() {
return "Result [success=" + success + ", message=" + message + "]";
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- SpringMVC+Ajax+拼接html字符串實(shí)例代碼
- 詳解如何配置springboot跳轉(zhuǎn)html頁(yè)面
- Spring Boot引入swagger-ui 后swagger-ui.html無(wú)法訪問(wèn)404的問(wèn)題
- spring boot 2.x html中引用css和js失效問(wèn)題及解決方法
- springboot如何使用thymeleaf模板訪問(wèn)html頁(yè)面
- Springboot訪問(wèn)html頁(yè)面的教程詳解
- 詳解SpringBoot+Thymeleaf 基于HTML5的現(xiàn)代模板引擎
- spring boot請(qǐng)求異常處理并返回對(duì)應(yīng)的html頁(yè)面
- Springmvc返回html頁(yè)面問(wèn)題如何解決
相關(guān)文章
Java跳臺(tái)階實(shí)現(xiàn)思路和代碼
今天小編就為大家分享一篇關(guān)于Java跳臺(tái)階實(shí)現(xiàn)思路和代碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
mybatis-plus實(shí)現(xiàn)打印完整sql語(yǔ)句
這篇文章主要介紹了mybatis-plus實(shí)現(xiàn)打印完整sql語(yǔ)句方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
Java8新特性之空指針異常的克星Optional類的實(shí)現(xiàn)
這篇文章主要介紹了Java8新特性之空指針異常的克星Optional類的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
詳解Java的MyBatis框架中SQL語(yǔ)句映射部分的編寫
這篇文章主要介紹了Java的MyBatis框架中SQL語(yǔ)句映射部分的編寫,文中分為resultMap和增刪查改實(shí)現(xiàn)兩個(gè)部分來(lái)講解,需要的朋友可以參考下2016-04-04
SpringCloud使用Zookeeper作為注冊(cè)中心
這篇文章主要介紹了SpringCloud如何使用Zookeeper作為注冊(cè)中心,幫助大家更好的理解和學(xué)習(xí)使用Zookeeper,感興趣的朋友可以了解下2021-04-04
SpringBoot整合Mybatis注解開(kāi)發(fā)的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringBoot整合Mybatis注解開(kāi)發(fā)的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
java 數(shù)據(jù)結(jié)構(gòu)與算法 (快速排序法)
這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)與算法(快速排序法),,快速排序法是實(shí)踐中的一種快速的排序算法,在c++或?qū)ava基本類型的排序中特別有用,下面我們一起進(jìn)入文章學(xué)習(xí)更詳細(xì)的內(nèi)容吧,需要的朋友可以參考下2022-02-02
Java內(nèi)存泄漏問(wèn)題處理方法經(jīng)驗(yàn)總結(jié)
今天小編就為大家分享一篇關(guān)于Java內(nèi)存泄漏問(wèn)題處理方法經(jīng)驗(yàn)總結(jié),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
Spring Mvc下實(shí)現(xiàn)以文件流方式下載文件的方法示例
這篇文章主要介紹了Spring Mvc下實(shí)現(xiàn)以文件流方式下載文件的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05

