前端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();
}
}
}
}