文件的上传和回显

这里文件的上传和回显主要讲是在编辑器中的

1.导入相应的jar包

<!-- 时间操作组件 -->
            <dependency>
                <groupId>joda-time</groupId>
                <artifactId>joda-time</artifactId>
                <version>2.5</version>
            </dependency>


            <!-- Apache工具组件 -->
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.3.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-io</artifactId>
                <version>1.3.2</version>
            </dependency>
            <!-- 图片上传的依赖 -->
            <dependency>
                <groupId>commons-fileupload</groupId>
                <artifactId>commons-fileupload</artifactId>
                <version>1.3.2</version>
            </dependency>

2.在springMVC的配置文件中配置

<!-- 文件上传解析器 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="20971520"/>
    </bean>

3.bean中的工具类

package com.taotao.common.bean;

public class PicUploadResult {
    
    private Integer error;//判断你上传的文件格式是否正确
    
    private String url;//图片文件显示的路径
    
    private String width;
    
    private String height;

    public Integer getError() {
        return error;
    }

    public void setError(Integer error) {
        this.error = error;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getWidth() {
        return width;
    }

    public void setWidth(String width) {
        this.width = width;
    }

    public String getHeight() {
        return height;
    }

    public void setHeight(String height) {
        this.height = height;
    }
    
    

}

4.controller层的具体应用

package com.taotao.manage.controller;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Date;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.RandomUtils;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
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.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.taotao.common.bean.PicUploadResult;
import com.taotao.manage.service.PropertiesService;


/**
 * 图片上传 1.引入依赖的jar包 2.在配置文件中配置文件上传解析器  3.控制层
 */
@Controller
@RequestMapping("/pic")
public class PicUploadController {

    private static final Logger LOGGER = LoggerFactory.getLogger(PicUploadController.class);

    @Autowired
    private PropertiesService propertiesService;
private static final ObjectMapper mapper = new ObjectMapper(); // 允许上传的格式 private static final String[] IMAGE_TYPE = new String[] { ".bmp", ".jpg", ".jpeg", ".gif", ".png" }; @RequestMapping(value = "/upload", method = RequestMethod.POST) @ResponseBody public String upload(@RequestParam("uploadFile") MultipartFile uploadFile , HttpServletResponse response) throws Exception { // 校验图片格式 boolean isLegal = false; for (String type : IMAGE_TYPE) { if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) { isLegal = true; break; } } // 封装Result对象,并且将文件的byte数组放置到result对象中 PicUploadResult fileUploadResult = new PicUploadResult(); // 状态 fileUploadResult.setError(isLegal ? 0 : 1); // 文件新路径 String filePath = getFilePath(uploadFile.getOriginalFilename()); if (LOGGER.isDebugEnabled()) { LOGGER.debug("Pic file upload .[{}] to [{}] .", uploadFile.getOriginalFilename(), filePath); } // 生成图片的绝对引用地址 因为我没有配置图片服务器. ngnix配置 String picUrl = StringUtils.replace(StringUtils.substringAfter(filePath, propertiesService.IMAGE_REPOSITORY), "\\", "/"); fileUploadResult.setUrl(propertiesService.IMAGE_URL + picUrl); File newFile = new File(filePath); // 写文件到磁盘 uploadFile.transferTo(newFile); // 校验图片是否合法 isLegal = false; try { BufferedImage image = ImageIO.read(newFile); if (image != null) { fileUploadResult.setWidth(image.getWidth() + ""); fileUploadResult.setHeight(image.getHeight() + ""); isLegal = true; } } catch (IOException e) { } // 状态 fileUploadResult.setError(isLegal ? 0 : 1); if (!isLegal) { // 不合法,将磁盘上的文件删除 newFile.delete(); } response.setContentType(MediaType.TEXT_HTML_VALUE); return mapper.writeValueAsString(fileUploadResult); } private String getFilePath(String sourceFileName) { String baseFolder = propertiesService.IMAGE_REPOSITORY + File.separator + "images"; Date nowDate = new Date(); // yyyy/MM/dd String fileFolder = baseFolder + File.separator + new DateTime(nowDate).toString("yyyy") + File.separator + new DateTime(nowDate).toString("MM") + File.separator + new DateTime(nowDate).toString("dd"); File file = new File(fileFolder); if (!file.isDirectory()) { // 如果目录不存在,则创建目录 file.mkdirs(); } // 生成新的文件名 String fileName = new DateTime(nowDate).toString("yyyyMMddhhmmssSSSS") + RandomUtils.nextInt(100, 9999) + "." + StringUtils.substringAfterLast(sourceFileName, "."); return fileFolder + File.separator + fileName; } }

5.在以上controller层中引入的属性文件应用的两种方式

属性文件env.properties

image_repository=D:\\bigdata6\\taotao-upload
image_url=http://image.taotao.com

在spring的配置文件applicationContext.xml中引入该属性文件

<!-- 引入属性文件 -->
     <context:property-placeholder location="classpath:*.properties"/>

第一种

在service层中建立PropertiesService.java

package com.taotao.manage.service;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class PropertiesService {
    @Value("${image_repository}") //读取属性文件的值
    public String IMAGE_REPOSITORY;
    
    @Value("${image_url}") //读取属性文件的值
    public String IMAGE_URL;
    
}

在controller层中加入

@Autowired
private PropertiesService propertiesService;

第二种

要先在springMVC的配置文件中加入

<!-- 引入属性文件 -->
     <context:property-placeholder location="classpath:env.properties"/>

在controller层中直接加入

@Value("${image_repository}") //读取属性文件的值
    public String IMAGE_REPOSITORY;
    
    @Value("${image_url}") //读取属性文件的值
    public String IMAGE_URL;

 

posted @ 2019-10-13 21:00  &天涯海角&  阅读(2197)  评论(0编辑  收藏  举报