Java SSM 圖片上傳
阿新 • • 發佈:2019-02-15
近期寫到圖片上傳,就是將圖片上傳至伺服器
該上傳的方式為,前臺將圖片轉成base64碼 ,然後將資料流傳送後臺,然後我再進行base64解碼,並且將圖片上傳至伺服器
// DTO層
package com.hand.utils.uploads.dto; import java.util.List; /**Auto Generated By Hap Code Generator**/ public class Upload { private String fileName;//檔名稱 private String imgStr;// 圖片流 private String[] imgListStr;// 批量上傳 private String jsonDataStr; public String getJsonDataStr() { return jsonDataStr; } public void setJsonDataStr(String jsonDataStr) { this.jsonDataStr = jsonDataStr; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public String getImgStr() { return imgStr; } public void setImgStr(String imgStr) { this.imgStr = imgStr; } public String[] getImgListStr() { imgListStr = this.getImgStr().split(","); return imgListStr; } public void setImgListStr(String[] imgListStr) { this.imgListStr = imgListStr; } }
// Controller 層
package com.hand.utils.uploads.controllers; import com.hand.hap.system.dto.ResponseData; import com.hand.utils.uploads.dto.Upload; import com.hand.utils.uploads.service.IUploadService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; @Controller public class UploadController{ @Autowired private IUploadService service; @RequestMapping(value = "/app/upload/img",method = RequestMethod.POST) @ResponseBody public ResponseData appUploadImg(Upload dto, HttpServletRequest request) { /** * * 功能描述: app 上傳圖片 * * @auther:lkj * @date:2018/7/26 下午4:40 * @param:[dto, request] * @return:com.hand.hap.system.dto.ResponseData * */ try { ResponseData responseData = service.appUploadImg(dto); return responseData; } catch (Exception e) { e.printStackTrace(); ResponseData responseData = new ResponseData(false); responseData.setMessage(e.getMessage()); return responseData; } } }
// IUploadService 層
package com.hand.utils.uploads.service; import com.hand.hap.system.dto.ResponseData; import com.hand.utils.uploads.dto.Upload; public interface IUploadService{ /** * * 功能描述: APP 圖片上傳 * * @auther:lkj * @date:2018/7/26 下午4:43 * @param: * @return: * */ ResponseData appUploadImg(Upload dto) throws Exception; }
// ServiceImpl 實現類
package com.hand.utils.uploads.service.impl; import com.hand.hap.system.dto.ResponseData; import com.hand.utils.components.mapper.UtilMapper; import com.hand.utils.uploads.dto.Upload; import com.hand.utils.uploads.service.IUploadService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import sun.misc.BASE64Decoder; import java.io.*; import java.util.Date; import java.util.List; @Service @Transactional(rollbackFor = Exception.class) public class UploadServiceImpl implements IUploadService { @Autowired private UtilMapper utilMapper; @Override public ResponseData appUploadImg(Upload dto) throws Exception{ /** * * 功能描述: App 圖片上傳 * * @auther:lkj * @date:2018/7/26 下午4:43 * @param:[dto] * @return:com.hand.hap.system.dto.ResponseData * */ String fileName = dto.getFileName();// 資料夾名稱 String[] imgListStr = dto.getImgListStr(); //拼接成完整的指定的檔案路徑名,建立新檔案 //我的檔案路徑是配置的快碼 String sql = "SELECT T.PROFILE_VALUE FROM SYS_PROFILE_VALUE T WHERE "; sql += "T.PROFILE_ID = ( SELECT PROFILE_ID FROM sys_profile WHERE PROFILE_NAME = 'APP_UP_IMG_PATH' ) "; String mysql = utilMapper.mysql(sql); String filePath = mysql+"/"+fileName; File file = new File(filePath); if(!file.exists()){ file.mkdirs(); } for(int i=0;i<imgListStr.length;i++){ // 獲取時間戳 long nowDate=(new Date().getTime()); String filename=nowDate+".jpg"; GenerateImage(imgListStr[i],filePath+"/"+filename); } return new ResponseData(); } //解碼 public static boolean GenerateImage(String imgStr, String imgFilePath) throws IOException { // 對位元組陣列字串進行Base64解碼並生成圖片 if (imgStr == null) // 影象資料為空 return false; BASE64Decoder decoder = new BASE64Decoder(); // Base64解碼 byte[] bytes = decoder.decodeBuffer(imgStr); for (int i = 0; i < bytes.length; ++i) { if (bytes[i] < 0) {// 調整異常資料 bytes[i] += 256; } } // 生成jpeg圖片 OutputStream out = new FileOutputStream(imgFilePath); out.write(bytes); out.flush(); out.close(); return true; } }