文件的上傳和回顯


這里文件的上傳和回顯主要講是在編輯器中的

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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM