後臺處理前端圖片上傳簡易示例程式碼
阿新 • • 發佈:2019-02-19
前端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();
}
}
}
}