码迷,mamicode.com
首页 > 其他好文 > 详细

file_upload

时间:2017-09-22 21:09:50      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:encoding   gns   val   sys   习惯   months   path   tcl   color   

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Properties;

import org.apache.commons.fileupload.disk.DiskFileItem;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

/**
 * file upload
 * 
 * @author ForeignStudent
 * @version 2017/9/21
 */
public class FileUpload {
    
    public static final String SLASHES = "/";
    public static final String DOT = ".";
    
    //properties path    properties文件在项目中的位置
    public static final String PROPERTIES_PATH = "applicationContext/spring.properties";
    //static initial path  文件保存的路径
    public static final String IMG_UPLOAD_SAVEPATH = "img_upload_savePath";
    //session length     字节流一次读取的长度
    public static final String IMG_UPLOAD_LENGTH = "img_upload_length";
    
    //file shunt path    文件保存位置(因为文件不可能只有一种用途,所以添加分流,可以在下面继续添加,和properties文件属性保持一致)
    public static final String SHUNT_PATH = "shunt_path";

    /**
     * file upload
     * 
     * @param multipartFile       spring up file
     * @param savePath             save path
   * @param databasePath      shunt path
*/ @SuppressWarnings("deprecation") public static String fileSave(MultipartFile multipartFile, String savePath, String databasePath) { // will be create file name    生成一个文件名称,这里使用uuid,当然也可以使用其他,本人习惯uuid String imgName = StringUtils.getUUId(); // Strong conversions file     spring自带文件上传没有细研究,所有强转成file进行处理 CommonsMultipartFile cf = (CommonsMultipartFile) multipartFile; DiskFileItem fi = (DiskFileItem) cf.getFileItem(); File file = fi.getStoreLocation(); // file name              上传文件的名称,截取后缀时用 String fileName = multipartFile.getOriginalFilename(); // file prefix             上传文件的后缀,这里没有限制上传格式,最好在其他层面判断 String prefix = fileName.substring(fileName.lastIndexOf(".") + 1);       
      
     // 生成日期,获取月和日,作为文件夹来使用,最好是加上年,这里没加 Date date
= new Date(); int month = date.getMonth(); int day = date.getDay(); String months = String.valueOf(month) + "month"; String days = String.valueOf(day) + "day";
     //  获取properties配置的读取长度,把长度写成可配置就可以随情况而确定要多大长度
int length = Integer.parseInt(readProperties(IMG_UPLOAD_LENGTH)); byte[] buffer = new byte[length]; int numberRead = 0; FileInputStream input = null; FileOutputStream out = null; try {
        //生成要创建的文件夹路径 String savePaths
= savePath + SLASHES + databasePath + SLASHES + months + SLASHES + days; input = new FileInputStream(file);
        //这里创建文件夹,存在就不创建,不存在就创建 createFile(savePaths); out
= new FileOutputStream(savePaths + SLASHES + imgName + DOT + prefix); while ((numberRead = input.read(buffer)) != -1) { out.write(buffer, 0, numberRead); }
        //返回文件路径,不带盘符,可以使用静态资源访问文件
return databasePath + SLASHES + months + SLASHES + days + SLASHES + imgName + DOT + prefix; } catch (final IOException e) { e.printStackTrace(); } finally { try { input.close(); out.close(); } catch (IOException e) { e.printStackTrace(); } } return null; } /** * create folders * * @param path save path */ public static void createFile(String savePath) { File file = new File(savePath); boolean exists = file.exists();
      //判断路径是否存在
if (!exists) { boolean mkdir = file.mkdirs(); System.out.println(mkdir); } } /** * read properties file * * @param attribute * @return */ public static String readProperties(String attribute) { Properties properties = new Properties(); try {
        //加载properties文件,可以通过getproperty()来获取属性 properties.load(FileUpload.
class.getClassLoader().getResourceAsStream(PROPERTIES_PATH)); return properties.getProperty(attribute); } catch (IOException e) { e.printStackTrace(); } return null; } // Call the instance    调用实例 // public String imgSave(MultipartFile multipartFile) { // String propertiesValue = FileUpload.readProperties(FileUpload.IMG_UPLOAD_SAVEPATH); // String readProperties = FileUpload.readProperties(FileUpload.SHUNT_PATH); // String fileSave = FileUpload.fileSave(multipartFile, propertiesValue, readProperties); // return fileSave; // } }

    spring 上传文件功能实现得配置 如下bean

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
      <property name="defaultEncoding" value="utf-8" />
      <!--1024*200即200k-->
      <!-- 1024*1024即1M -->
      <property name="maxUploadSize" value="1024*1024" />
      <!-- <property name="maxInMemorySize" value="40960" /> -->
    </bean>

 

    同时在页面的from里面加上  enctype="multipart/form-data"  否则后台接收不到文件

 

第一次发博客,测试心里居多,以上代码是经测试完全通过,希望看到的大神们多多指点,小弟在这这里谢谢了。

file_upload

标签:encoding   gns   val   sys   习惯   months   path   tcl   color   

原文地址:http://www.cnblogs.com/foreign-student/p/7576825.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!