HTML5+canvas實現圖片的壓縮上傳
1.圖片上傳輸入框
<input type="file" name="" class="fileUpload" accept="image/*" capture="camera"/>
2.上面時候觸發onchange
$('.fileUpload').on('change', function () { id = $(this).parent().attr("id"); //上傳成功移除file input $(this).parent().children().remove(); var _this = $(this)[0], _file = _this.files[0],//裡面存放是圖片資訊 fileType = _file.type; console.log(_file.size); if(/image\/\w+/.test(fileType)){ $.showLoading("圖片上傳中..."); var fileReader = new FileReader(); fileReader.lastModifiedDate = _file.lastModifiedDate fileReader.name = _file.name fileReader.readAsDataURL(_file); fileReader.onload = function(event){ var result = event.target.result; //返回的dataURL var image = new Image(); image.src = result; image.onload = function(){ //建立一個image物件,給canvas繪製使用 //通過canvas生成base64字串,後臺會解析這個字串,dataURL是最終生成的字串
$.post(ctx + '/base/front/photoInfo/uploadPicture.sy',{ 'file': dataURL, //base64字串 'fileDate': (typeof (event.target.lastModifiedDate) != 'undefined' ? event.target.lastModifiedDate : new Date()).Format("yyyy-MM-dd hh:mm:ss"),//圖片修改時間,通過這個來判斷是否是直接拍攝的照片 'fileName': event.target.name//照片名稱 },function(data, code){ $.hideLoading(); $.modal({ title: ' ', text: "上傳成功!" }); },'json'); } } }else{ $.modal({ title: ' ', text: "請選擇圖片格式檔案!" }); }});var canvas = document.createElement("canvas"); canvas.width = this.width; canvas.height = this.height; var c = canvas.getContext("2d"); c.drawImage(this, 0, 0, this.width, this.height); var dataURL = canvas.toDataURL("image/jpeg");
3.後臺程式碼:
1.在Controller或者Action中呼叫,所需的引數file是上面post請求中所攜帶的dataURL,即base64字串。FileUpload是自己寫的一個Class,進行處理base64字串
FileUpload upload = new FileUpload(file.split(",")[1]);
JSONObject jsonObject = upload.uploadFlowFile();//savePath
2.在FileUpload中的方法,下面用到的fileFlow引數是上面new FileUpload時傳進的引數
用到的是 sun.misc.BASE64Decoder包
/**
* 方法名稱:
* 方法描述:上傳檔案
* 建立時間:2015-9-29 下午1:39:03
*/
public JSONObject uploadFlowFile() throws Exception{
JSONObject json=new JSONObject();
try {
finishedFlowUpload("uploadPath");
json.put("msg", this.getSavePath());
json.put("fileName", this.getFiledataFileName());
json.put("savePath", this.getSavePath());
json.put("status", true);
} catch (Exception e) {
e.printStackTrace();
json.put("status", false);
}
return json;
}
protected void finishedFlowUpload(String savePathKey) throws Exception {
// 根據伺服器的檔案儲存地址和原檔名建立目錄檔案全路徑
String dstPath = null;
// 儲存路徑
String bsPath = null;
// 檔案型別
String fileType = ".png";
String uuidName = null;
if(null!=savePathKey){
dstPath = ConfigUtil.get(savePathKey);//spring boot配置的儲存路徑
}
if(null==dstPath||"".equals(dstPath)){
dstPath = ServletActionContext.getServletContext().getRealPath("/");
}
bsPath = "/" + DateUtil.dateToString(DateUtil.getNow(),DateUtil.SYS_DATE_FORMAT) + "/";
File f1 = new File(dstPath+bsPath);
if (!f1.exists()) {
f1.mkdirs();
}
uuidName = UUID.randomUUID().toString();
bsPath = bsPath + uuidName + fileType;
dstPath = dstPath + bsPath;
File dstFile = new File(dstPath);
copyFlow(fileFlow, dstFile);
setSavePath(new ArrayList<String>());
this.getSavePath().add(bsPath);
}
protected static void copyFlow(String fileInputStream, File dst) {
OutputStream out = null;
try {
out = new BufferedOutputStream(new FileOutputStream(dst),
BUFFER_SIZE);
BASE64Decoder base64Decoder = new BASE64Decoder();
byte[] result = base64Decoder.decodeBuffer(fileInputStream);//解碼
for (int i = 0; i < result.length; ++i) {
if (result[i] < 0) {// 調整異常資料
result[i] += 256;
}
}
out.write(result);
out.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
參考連結:
相關推薦
微信小程式呼叫攝像頭,實現圖片壓縮上傳
這篇文章主要為大家詳細介紹了微信小程式實現圖片壓縮功能,具有一定的參考價值,感興趣的小夥伴們可以參考一下,下面直接上程式碼 先是wxml: <view bindtap='takePictures'>選擇圖片</view> <canv
HTML5+canvas實現圖片的壓縮上傳
1.圖片上傳輸入框<input type="file" name="" class="fileUpload" accept="image/*" capture="camera"/>2.上面時候觸發onchange$('.fileUpload').on('chang
JS+HTML5實現前端的圖片壓縮上傳到騰訊的COS上
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <meta name="viewport" content="w
Vue directive自定義指令+canvas實現H5圖片壓縮上傳-Base64格式
前言 最近優化專案-手機拍照圖片太大,回顯速度比較慢,使用了vue的自定義指令實現H5壓縮上傳base64格式的圖片 canvas自定義指令 Vue.directive("canvas",
JS上傳圖片,利用canvas實現圖片壓縮
操作 base64 itob 思考 旋轉角度 基礎 inpu url 一位 項目中的一個基礎功能-----手機上傳圖片 技術棧: 1、利用canvas進行壓縮(這個應該都比較熟悉)2、利用exif-js獲取照片旋轉角度屬性,因為有些手機機型會因為拍照時手機的方向使拍的照片帶
基於html5 JS實現的拍照上傳圖片
<style> #video,#canvas {display: block;margin:1em auto;width:180px;height:180px;} #snap { display: block;margin:0 auto;width:80%;he
Spring 使用七牛雲端儲存上傳圖片以及html5圖片壓縮上傳
需求: 最近在做專案的時候採用了多模組的方案 前臺是一個系統 後臺是另一個系統 在做圖片上傳的時候有個問題 如果想之前那樣前臺系統的圖片儲存的自己的web應用目錄下 後臺系統是沒法訪問的 (直接寫死路徑不太好) 這裡我想到了兩個方案 方案一:自己搭建
HTML5 本地裁剪圖片並上傳至伺服器 canvas圖片上傳 canvas圖片裁剪
很多情況下使用者上傳的圖片都需要經過裁剪,比如頭像啊什麼的。但以前實現這類需求都很複雜,往往需要先把圖片上傳到伺服器,然後返回給使用者,讓使用者確定裁剪座標,傳送給伺服器,伺服器裁剪完再返回給使用者,來回需要 5 步。步驟繁瑣不說,當很多使用者上傳圖片的時候也很影響伺服器
H5+jqweui實現手機端圖片壓縮上傳 Base64
主要功能,使用H5的formData上傳base64格式的圖片,canvas壓縮圖片,前端樣式使用weui,為方便起見,使用了jquery封裝過的weui,jqweui。話不多少,開始上程式碼。前端程式碼,直接在jqweui官網下的demo裡改的(是dist下的demo)<!DOCTYPE html&g
H5+jqweui實現手機端圖片壓縮上傳
主要功能,使用H5的formData上傳base64格式的圖片,canvas壓縮圖片,前端樣式使用weui,為方便起見,使用了jquery封裝過的weui,jqweui。 話不多少,開始上程式碼。 前端程式碼,直接在jqweui官網下的demo裡改的(是dist下的demo) <!DOCTYPE ht
HTML5 canvas實現圖片拉伸、壓縮與裁剪
前言: 我們在網頁中經常會用到圖片展示,通常情況下會給一個固定的寬高來顯示這個圖片,然而從伺服器端上傳的圖片大小是不確定的,如果直接按預設填充這個框有時候就會特別醜orz。作為一個完(wai)美(mao)主(xie)義(hui)者,讓圖片們儘可能優美
H5實現多圖上傳與預覽,圖片壓縮上傳
H5多圖上傳,並實現壓縮(可根據實際情況選擇對多大的圖片進行壓縮,本例為大於512KB的進行壓縮)和預覽 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT
移動端圖片壓縮上傳解決方案
長度 繪制圖片 slice ase 但是 choose 100萬 lis 計算 最近做移動端圖片上傳,發現圖片尤其是iPhone拍照的圖片都有2M左右,但是實際上項目中用不到這麽大,於是想到要用js在前臺進行壓縮。 解決方案如下: 【一】獲取圖片數據 先是獲取圖片數據
前端圖片壓縮上傳(純js的質量壓縮,非大小壓縮)
默認 || callback doc 圖片格式 toc jpeg rtb src 此demo為大於1M對圖片進行壓縮上傳 若小於1M則原圖上傳,可以根據自己實際需求更改。 demo源碼如下: <!DOCTYPE html> <html> <h
移動前端圖片壓縮上傳
safari 嘻嘻 如果 tee ini andro 並且 ons create 摘要:之前在做一個小遊戲平臺項目,有個“用戶中心”模塊,就涉及到了頭像上傳的功能。在做移動端圖片上傳的時候,傳的都是手機本地圖片,而本地圖片一般都相對比較大,拿現在的智能手機來說,平時拍很
vue裏圖片壓縮上傳組件
UNC cep accept posit click toa dcl v-on ati //單圖上傳 <template> <div> <div class="uploader" v-if=‘!dwimg‘&g
summernote富文字編輯器實現圖片新增上傳和刪除圖片
summernote的基本使用 HTML程式碼 //div添加個id就可以 <div id="summernote" ></div> 然後JS操作 //例項化呼叫 var $summernote = $('#summernote').summernote(
javaweb實現圖片檔案上傳
圖片上傳到檔案中,可以直接上傳圖片到目錄中,也還可以將圖片檔名、檔案路徑寫入到資料庫中,也可以在程式中動態的建立檔案路徑。 參看:http://blog.csdn.net/lmdcszh/article/details/9201173 package com.ioif.wha.ima
node實現圖片的上傳功能
目標 圖片的上傳 npm install multer --save banner.ejs <section class="content-header">  
TP框架圖片壓縮/上傳
<-- 在前端的程式碼 --><form action="{:url('index/user/personal')}" method="post" enctype="multipart/form-data"> <input type="file" name="image"