后台处理前端图片上传简易示例代码

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

            }
        }
    }

猜你喜欢

转载自blog.csdn.net/XlxfyzsFdblj/article/details/79907751