• file_upload


    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"  否则后台接收不到文件

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

  • 相关阅读:
    TP5报如下的错误 Indirect modification of overloaded element of thinkpaginatorCollection has no effect【转】
    PHPnumber_format()函数的使用
    蓝桥杯-PREV28-地宫取宝
    HihoCode-1053-居民迁移
    HihoCode-1323-回文字符串
    蓝桥杯-PREV3-带分数
    HDU-6312-Game
    HDU-6438-Buy and Resell
    CF-1117C-Magic Ship
    HDU-2802-F(N)
  • 原文地址:https://www.cnblogs.com/foreign-student/p/7576825.html
Copyright © 2020-2023  润新知