上传图片

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>

 

posted on 2017-09-25 17:20  0001  阅读(342)  评论(0编辑  收藏  举报