前臺將圖片轉換爲base64的方法如下:
$("#article_image").change(function(){
var file = this.files[0];
//判斷類型是不是圖片
if(!/image\/\w+/.test(file.type)){
alert("請確保文件爲圖像類型");
return false;
}
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function(e){
image_base64=this.result.split(",")[1];
//就是base64
article_image = image_base64;
}
});
後臺代碼接受base64的值,轉換爲圖片後存儲返回存儲的url
@RequestMapping(value = "/uploadPoster.do")
public @ResponseBody Object uploadPoster(HttpServletRequest request,
HttpServletResponse response) throws Exception {
HttpJson httpJson = new HttpJson();
System.out.println("開始上傳照片");
String customerId = request.getParameter("computecustomerId");
String ret_fileName = null;// 返回給前端已修改的圖片名稱
String base64Img = request.getParameter("base64");
// 臨時文件路徑
//String dirTemp = "\\upload\\temp";
String dirTemp = "\\upload";
String uploadImg = "\\upload";
try {
request.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
httpJson.setMsg("上傳圖片失敗");
httpJson.setSuccess(false);
return httpJson;
}
// response.setContentType("text/html; charset=UTF-8");
// PrintWriter out = response.getWriter();
String realPath = request.getServletContext().getRealPath("");
String tempPath = request.getServletContext().getRealPath("/")
+ dirTemp;
File file_normer = new File(realPath + uploadImg+"/"+customerId);
if (!file_normer.exists()) {
file_normer.mkdirs();
}
// 用於設置圖片過大,存入臨時文件
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(20 * 1024 * 1024); // 設定使用內存超過5M時,將產生臨時文件並存儲於臨時目錄中。
factory.setRepository(new File(tempPath)); // 設定存儲臨時文件的目錄。
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
if (base64Img == null) // 圖像數據爲空
return false;
base64Img = base64Img.replaceAll("data:image/jpeg;base64,", "");
BASE64Decoder decoder = new BASE64Decoder();
try {
// Base64解碼
byte[] b = decoder.decodeBuffer(base64Img);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {// 調整異常數據
b[i] += 256;
}
}
// 生成jpeg圖片
ret_fileName = new String((DateHandler.dateToStr(new Date(),"yyyyMMddhhmmss")+".jpg").getBytes("gb2312"), "ISO8859-1" ) ;
File file = new File(realPath + uploadImg+"/"+ customerId + "/" + ret_fileName);
OutputStream out = new FileOutputStream(file);
out.write(b);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
String image_url = request.getSession().getServletContext() .getContextPath()+ "/upload/" + customerId + "/" + ret_fileName;
// 將已修改的圖片url對應的id返回前端
httpJson.setMsg("上傳圖片成功");
httpJson.setSuccess(true);
httpJson.setObj(image_url);
return JSONObject.fromObject(httpJson);
}
}
17級徐朝暉 2017年3月16日