1. 程式人生 > >後臺處理前端圖片上傳簡易示例程式碼

後臺處理前端圖片上傳簡易示例程式碼

前端form表單上傳圖片示例程式碼

<form action="/picture/upload" method="post" enctype="multipart/form-data" name="upload_form">
    <label>選擇圖片檔案</label>
    <input name="imgfile" type="file" accept="image/gif, image/jpeg"/>
    <input name="upload" type="submit" value="上傳" />
</form>

後臺需要匯入下面兩個包

<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.4</version>
</dependency>
<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId
>
<version>1.3.1</version> </dependency>

後臺controller程式碼

@ResponseBody
@RequestMapping(value = "/picture/upload")
public ResultData pictureUpload(HttpServletRequest request) {
    pictureService.uploadPicture(request);
    return ResultData.success();
}

後臺service程式碼

    private
String address = "D:/image/"; private static final long MAXSIZE = 1048576; private static Set<String> formatSet = Sets.newHashSet(); static { formatSet.add(".jpg"); formatSet.add(".png"); } private String getFormat(FileItem item) { long size = item.getSize(); //設定上傳的最大值1MB, 1024*1024 if(size > MAXSIZE) { throw new PictureException("圖片過大, 請使用小於1MB的圖片上傳"); } String fileName = item.getName(); String format = fileName.substring(fileName.lastIndexOf(".")); if(!formatSet.contains(format)) { throw new PictureException("請使用格式為.jpg或.png的圖片"); } return format; } private File createFile(String athleteIdCard, String format) { //目錄結構 address+省份+運動員id.jpg(圖片名) 例如 D:/image/HUNAN/123.jpg String team = "HUNAN"; String fileName = address + team + "/" + athleteIdCard + format; File file = new File(fileName); if(!file.getParentFile().exists()) { //建立多級目錄 if(!file.getParentFile().mkdirs()) { throw new PictureException("建立檔案失敗"); } } if(!file.exists()) { try { if(file.createNewFile()) { return file; } } catch (IOException e) { e.printStackTrace(); throw new PictureException("建立檔案失敗"); } } return file; } @Override public void uploadPicture(HttpServletRequest request) { String number = "123"; DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); InputStream inputStream = null; FileOutputStream fileOutputStream = null; try { List<FileItem> list = upload.parseRequest(request); for(FileItem item : list) { if(!item.isFormField()) { String format = getFormat(item); inputStream = item.getInputStream(); byte[] buffer = new byte[1024]; File file = createFile(number, format); fileOutputStream = new FileOutputStream(file); int len = 0; while((len = inputStream.read(buffer)) > 0) { fileOutputStream.write(buffer, 0, len); } } } } catch (FileUploadException | IOException e) { e.printStackTrace(); throw new PictureException("伺服器繁忙請稍後在試"); } finally { if(inputStream != null) { try { inputStream.close(); if(fileOutputStream != null) { fileOutputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } } }