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

    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>

  • 相关阅读:
    数据结构-树与二叉树-思维导图
    The last packet successfully received from the server was 2,272 milliseconds ago. The last packet sent successfully to the server was 2,258 milliseconds ago.
    idea连接mysql报错Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property
    redis学习笔记
    AJAX校验注册用户名是否存在
    AJAX学习笔记
    JSON学习笔记
    JQuery基础知识学习笔记
    Filter、Listener学习笔记
    三层架构学习笔记
  • 原文地址:https://www.cnblogs.com/javaxiaoxin/p/7592881.html
Copyright © 2011-2022 走看看