• 上传图片


    package com.xxxxxx.manager.controller;
    
    import java.awt.image.BufferedImage;
    
    import javax.imageio.ImageIO;
    
    import org.apache.commons.lang3.StringUtils;
    import org.csource.fastdfs.ClientGlobal;
    import org.csource.fastdfs.StorageClient;
    import org.csource.fastdfs.StorageServer;
    import org.csource.fastdfs.TrackerClient;
    import org.csource.fastdfs.TrackerServer;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.http.MediaType;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.taotao.common.pojo.PicUploadResult;
    
    @Controller
    @RequestMapping("pic/upload")
    public class PicUploadController {
    
        // 声明Jackson工具类,要用到3个功能:1.对象转json;2.json转对象;3.直接解析json
        private static final ObjectMapper MAPPER = new ObjectMapper();
    
        @Value("${XXXXXX_IMAGE_PATH}")
        private String XXXXXX_IMAGE_PATH;
    
        // 声明哪些类型的文件可以上传
        private String[] TYPE = { ".jpg", ".gif", ".jpeg", ".bmp", ".png" };
    
        // filePostName : "uploadFile", //图片上传的参数的名字
        // uploadJson : '/rest/pic/upload', //上传图片的请求地址
        @RequestMapping(method = RequestMethod.POST, produces = MediaType.TEXT_HTML_VALUE)
        @ResponseBody
        public String upload(MultipartFile uploadFile) throws Exception {
            // 声明返回值PicUploadResult
            PicUploadResult picUploadResult = new PicUploadResult();
            // 默认设置上传失败0上传成功,1代表上传失败
            picUploadResult.setError(1);
    
            // 设置标识位,校验的时候使用,默认校验失败
            boolean flag = false;
    
            // 校验文件类型,就是校验后缀
            for (String type : TYPE) {
                // 判断是否是要求的后缀结尾
                if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) {
                    // 设置标识位为true
                    flag = true;
                    // 跳出循环
                    break;
                }
            }
    
            // if(flag ==false){
            if (!flag) {
                // 如果校验失败直接返回
                // return picUploadResult;
                // 使用Jackson工具类,把对象转json数据返回
                String json = MAPPER.writeValueAsString(picUploadResult);
                return json;
            }
    
            // 校验成功,进行下一轮校验,重置标识位为false
            flag = false;
    
            // 校验文件内容,就是校验宽和高
            try {
                BufferedImage image = ImageIO.read(uploadFile.getInputStream());
                if (image != null) {
                    // 设置宽和高
                    picUploadResult.setHeight("" + image.getHeight());
                    picUploadResult.setWidth(String.valueOf(image.getWidth()));
    
                    // 执行到这里没有问题,表示校验成功
                    flag = true;
                }
    
            } catch (Exception e) {
                // 不处理异常,因为这里是校验,如果有异常代表校验失败,不上传就可以了
            }
    
            // 如果校验成功,则执行图片上传
            // if(flag == true){
            if (flag) {
                // 上传图片
                // 初始化上传
                ClientGlobal.init(System.getProperty("user.dir") + "/src/main/resources/tracker.conf");
    
                // 获取TrackerClient
                TrackerClient trackerClient = new TrackerClient();
    
                // 获取TrackerServer
                TrackerServer trackerServer = trackerClient.getConnection();
    
                // 声明StorageServer
                StorageServer storageServer = null;
    
                // 创建StorageClient
                StorageClient storageClient = new StorageClient(trackerServer, storageServer);
    
                // 执行上传图片,返回字符串数组 1.2.3.4.jpg
                String extName = StringUtils.substringAfterLast(uploadFile.getOriginalFilename(), ".");
                String[] str = storageClient.upload_file(uploadFile.getBytes(), extName, null);
    
                // 拼接图片上传成功的url地址
                String picUrl = this.XXXXXX_IMAGE_PATH + str[0] + "/" + str[1];
    
                // 设置返回的数据
                // 设置图片url
                picUploadResult.setUrl(picUrl);
    
                // 设置图片上传成功error为0
                // 0上传成功,1代表上传失败
                picUploadResult.setError(0);
    
            }
    
            // return picUploadResult;
            // 使用Jackson工具类,把对象转json数据返回
            String json = MAPPER.writeValueAsString(picUploadResult);
            return json;
    
        }
    }

    env.properties :

    #配置图片服务器的地址
    XXXXXX_IMAGE_PATH=http://192.168.37.161/

    tracker.conf :

    tracker_server=192.168.37.161:22122

    springmvc.xml :

    <!-- 配置上传解析器 -->
    <!-- 必须要配置id,id的名字是接口名 -->
    <bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 配置文件上传大小5M -->
    <property name="maxUploadSize" value="5000000" />
    </bean>

  • 相关阅读:
    python学习笔记(1)
    一些有趣的使用function
    axios构建请求池处理全局loading状态&&axios避免重复请求
    axios构建缓存池存储基础数据
    文件下载方法
    关于 JS this
    前端 JS 获取 Image 图像 宽高 尺寸
    Html CSS transform matrix3d 3D转场特效
    Github 持续化集成 工作流 Npm包自动化发布
    远程 Linux(Ubuntu 18)添加字体
  • 原文地址:https://www.cnblogs.com/javaxiaoxin/p/7592881.html
Copyright © 2020-2023  润新知