zoukankan      html  css  js  c++  java
  • springMVC图片上传

    思路

    1. 首先检查文件后缀是否是合法(比如.png,.jpg),列出对应的媒体类型(image/png,image/jpeg)
    2. 检查文件的内容是否是图片,防止破坏者将脚本后缀改为图片格式,图片是有宽和高的
    3. 保存到图片服务器,比如fastDFS图片存储服务器
    4. 回显Url(本案例将本地作为图片存储服务器,本地配置了一个域名,使用nginx代理到存储目录)

    实例代码

    
    @Service
    public class UploadServiceImpl implements UploadService {
        //保存日志的对象   
        private static final Logger logger = LoggerFactory.getLogger(UploadController.class);
     
        // 允许存储的文件类型白名单
        private static final List<String> suffixes = Arrays.asList("image/png", "image/jpeg");
     
        public String upload(MultipartFile file) {
            try {
                
                // 校验文件类型
                String type = file.getContentType();
                if (!suffixes.contains(type)) {
                      //此处的{}相当于字符串的占位符
                    logger.info("上传失败,文件类型不匹配:{}", type);
                    return null;
                }
                // 校验图片内容
                BufferedImage image = ImageIO.read(file.getInputStream());
                if (image == null) {
                    logger.info("上传失败,文件内容不符合要求");
                    return null;
                }
                
                // 生成保存目录
                File dir = new File("G:\LeYou\upload");
                if (!dir.exists()) {
                    dir.mkdirs();
                }
                //保存图片,第一个参数是路径,第二个参数是文件名,使用MultipartFile file获取源文件文件名
                file.transferTo(new File(dir, file.getOriginalFilename()));
     
                // 拼接图片地址,
                String url = "http://image.leyou.com/upload/" + file.getOriginalFilename();
     
                return url;
            } catch (Exception e) {
                return null;
            }
        }
    }
  • 相关阅读:
    图床
    MarkDown认识与入门
    IIS Express
    HTML中的英文缩写标记、属性
    AI-->从新建文档开始说起,串联相关色彩知识
    微软相关软件、操作系统常用下载方法(附离线方式)
    SubLime3 Emmet插件终极教程
    sublime text 3 扩展插件SideBarEnhancements用法教程
    几款前端开发工具比较
    关于VUE项目中报Error: Avoided redundant navigation to current location: 的错
  • 原文地址:https://www.cnblogs.com/treasury/p/12872321.html
Copyright © 2011-2022 走看看