通過圖片地址,將圖片處理成base64,使用ajax上傳圖片
需求
群裡的一個小朋友一直要求我幫他實現以下,我就寫了一個案例。需求就是,他用canvas生成了一個base64格式的圖片,然後需要將這個圖片上傳到伺服器上面去。
程式碼
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</head>
<body>
<img src="xwz.jpg" alt="" id="img">
</body>
<script>
let img = document.querySelector("#img");
img.onload = function () {
//建立formdata物件
var formdata = new FormData();
//獲取圖片的base64格式
var data = imgSrcToBase64(img);
//將獲取的base64格式圖片轉換為圖片檔案物件
var imgFile = convertBase64UrlToBlob(data);
//將檔案新增到formdata裡面
formdata.append("file",imgFile);
$.ajax({
url: "http://localhost:3000/map",
type:"post",
data:formdata,
processData: false, // 不處理資料
contentType: false , // 不設定內容型別
success:function (e) {
console.log(e);
}
});
};
/**
* 將以base64的圖片url資料轉換為Blob
* @param urlData
* 用url方式表示的base64圖片資料
*/
function convertBase64UrlToBlob(urlData){
var bytes=window.atob(urlData.split(',')[1]); //去掉url的頭,並轉換為byte
//處理異常,將ascii碼小於0的轉換為大於0
var ab = new ArrayBuffer(bytes.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i);
}
return new Blob( [ab] , {type : 'image/png'});
}
//將圖片轉為base64格式
function imgSrcToBase64(img) {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img,0,0,img.width,img.height);
return canvas.toDataURL();
}
</script>
</html>
由於自己沒有base64格式的圖片,所以現成將一張圖片轉成了base64格式。然後再將其轉換成二進位制的格式,放入到formdata物件內,直接將formdata使用ajax上傳。
相關文章
- 圖片上傳及圖片處理
- JS base64 圖片上傳JS
- iphone 將圖片處理成灰色(Gray)的iPhone
- vue+element 將圖片壓縮並轉換成base64上傳圖片Vue
- element上傳圖片元件使用方法|圖片回顯|格式轉換base64元件
- php圖片上傳之圖片轉換PHP
- 通過API介面實現圖片上傳API
- jQuery HTML5 AJAX 圖片上傳jQueryHTML
- Retrofit+RxJava上傳圖片上傳圖片到後臺RxJava
- vue 上傳圖片進行壓縮圖片Vue
- java,springboot + thymeleaf 上傳圖片、刪除圖片到伺服器、本地,壓縮圖片上傳(有些圖片會失真),原圖上傳JavaSpring Boot伺服器
- 【easyui 】上傳圖片UI
- Laravel 使用 FastDFS 上傳圖片LaravelAST
- 圖片上傳處理架構架構
- VueQuillEditor富文字上傳圖片-非base64VueUI
- Android圖片Base64加密+文字上傳Android加密
- 日常筆記三:將base64的圖片上傳到本地筆記
- 將上傳圖片打上防偽圖片水印並寫入資料庫資料庫
- spring 對上傳圖片處理Spring
- 多圖片formpost上傳ORM
- input file圖片上傳
- PHP上傳圖片類PHP
- 圖片檔案上傳
- Ajax+PHP實現非同步圖片上傳PHP非同步
- base64,雪碧圖CSS Sprite,直接使用圖片CSS
- 自定義上傳圖片拼圖遊戲遊戲
- Ueditor上傳圖片自動新增水印(通用圖片檔案)
- 菜鳥學JS(一)——上傳圖片之上傳前預覽圖片JS
- 基於Ajax的formData圖片和資料上傳ORM
- SpringMVC中Ajax非同步上傳圖片的方法SpringMVC非同步
- koa 圖片上傳詳解
- Vue圖片裁剪上傳元件Vue元件
- 圖片上傳方案詳解
- js上傳圖片壓縮JS
- vue圖片預覽上傳Vue
- Typora上傳圖片設定
- laravel 上傳附件-不是圖片--Laravel
- js圖片上傳預覽JS