java 实现图片的上传功能

@Controller
@RequestMapping("/rest")
public class ImageController {

    @Value("${IMAGE_BASE_PATH}")
    private String path;
    @Value("${IMAGE_BASE_URL}")
    private String url;
    
    private static final String[] IMAGE_TYPE = new String[] {".jpg",".jpeg",".png",".gif",".bmp"};
    
    @RequestMapping(value="/pic/upload",method=RequestMethod.POST,produces=MediaType.TEXT_PLAIN_VALUE)
    @ResponseBody
    public String imageUpload(@RequestParam("uploadFile")MultipartFile multipartFile) {
        if(multipartFile == null) {
            return JsonUtils.objtojson(ImageUploadResult.error("文件为空"));
        }
        //校验图片
        boolean isLegal = false;
        //1,校验图片的后缀
        //获取原来的文件名
        String oldName = multipartFile.getOriginalFilename();
        //获取文件后缀
        String oldSuffix = null;
        for (String suffix : IMAGE_TYPE) {
            if(StringUtils.endsWithIgnoreCase(oldName, suffix)) {
                oldSuffix = suffix;
                isLegal = true;
                break;
            }
        }
        
        if(!isLegal) {
            return JsonUtils.objtojson(ImageUploadResult.error("文件类型不合法"));
        }
        
        //2,校验是否为图片
        try {
            BufferedImage bufferedImage = ImageIO.read(multipartFile.getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
            return JsonUtils.objtojson(ImageUploadResult.error("文件内容不匹配"));
        }
        
        //执行图片的上传
        
        //1,获取图片的完整路径 返回文件对象
        File dest = getAbsPath(path,oldSuffix); 
        //2,执行存储
        try {
            multipartFile.transferTo(dest);
        }catch (IOException e) {
            e.printStackTrace();
            return JsonUtils.objtojson(ImageUploadResult.error("图片上传失败!原因为"+e.getMessage()));
        }
        //3,根据path生成url
        //获取绝对路径
        String absPath = dest.getAbsolutePath();
        String url1 = StringUtils.replace(StringUtils.replace(absPath, "\\", "/"), path, url);
        String string = JsonUtils.objtojson(ImageUploadResult.success(url1));
        System.out.println(string);
        return string;
    }

    /**
     * 
     * @param path2 存储的目录
     * @param oldSuffix 文件后缀
     * @return 文件对象
     */
    private File getAbsPath(String path2, String oldSuffix) {
        String dateStr = new DateTime().toString("/yyyy/MM/dd");
        File file = new File(path2, dateStr);
        if(!file.exists()) {
            file.mkdirs();
        }
        String newName = UUID.randomUUID().toString()+oldSuffix;
        File imgfile = new File(file, newName);
        return imgfile;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值