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

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

时间: 2024-10-19 06:20:13

file_upload的相关文章

Uploadify/uploadifive上传(中文文档)

Uploadify是一款基于JQuery的优秀的文件/图片上传的插件,有基于Flash和HTML5两种版本. Uploadify/uploadifive主要特点有: 1. 多文件上传 2. 个性化设置 3. 上传进度条显示 4. 拖拽上传(HTML5版本) 官网:http://www.uploadify.com 部署 在部署一个Uploadify实例前,请确保满足最低要求: 1.jQuery 1.4.x 或更高版本 2.Flash Player 9.0.24 或更高版本 3.支持PHP, ASP

基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用

很久之前,当我还在用Asp.NET开发一些行业管理系统的时候,就曾经使用这个组件作为文件的上传操作,在随笔<Web开发中的文件上传组件uploadify的使用>中可以看到,Asp.NET中如何使用这个组件进行文件上传的,当时上传文件的处理主要也是使用ashx一般处理程序来进行处理的.本文主要介绍我的Web开发框架中,在MVC4的环境中如何集成这个非常棒的文件上传组件的. 1.上传组件uploadify的说明及脚本引用 Uploadify 是 JQuery 一个著名的上传插件,利用 Flash

JQuery Uploadify3.2 + SpringMVC 文件上传

1.引入头文件(jQuery放前面,而且不能有多个JQuery) <script type="text/javascript" src="js/jquery-1.6.2.js"></script> <link rel="stylesheet" type="text/css" href="js/uploadify/uploadify.css"> <script typ

php.ini配置文件

php.ini配置文件: engine=On;使PHP脚本语言引擎在Apache下有效.当设置engine=Off后不能解析PHP文件. short_open_tag=Off;设置<? code ?>标志是否能被识别.设置short_open_tag=Off后不能识别在<? code ?>中的代码 . asp_tags = Off:设置<% code %>标志是否能被识别.设置asp_tags==Off;后不能识别. precision = 14:设置浮点类型数据显示位

Day35:基于UDO的套接字、粘包问题

一.基于UDP的套接字 UDP服务端 ss = socket() #创建一个服务器的套接字 ss.bind() #绑定服务器套接字 inf_loop: #服务器无限循环 cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送) ss.close() # 关闭服务器套接字 UDP客户端 cs = socket() # 创建客户套接字 comm_loop: # 通讯循环 cs.sendto()/cs.recvfrom() # 对话(发送/接收) cs.close() #

基于MVC+EasyUI的Web开发框架经验总结(10)--在Web界面上实现数据的导入和导出

数据的导入导出,在很多系统里面都比较常见,这个导入导出的操作,在Winform里面比较容易实现,我曾经在之前的一篇文章<Winform开发框架之通用数据导入导出操作>介绍了在Winform里面的通用导入导出模块的设计和开发过程,但在Web上我们应该如何实现呢?本文主要介绍利用MVC4+EasyUI的特点,并结合文件上传控件Uploadify 的使用,实现文件上传后马上进行处理并显示,然后确认后把数据写入数据库的过程. 我们知道,Web上对Excel的处理和Winform的有所差异,如果是在We

关于ajax和submit的技术结合

最近编程有一个需求:本页面上传文件后,弹出模态框,显示后端返回的内容.再根据模态框的指示做其他操作. $.ajax()提交多次发现总是失败. 发现ajax是不能直接提交"multipart/form-data"类型的数据,需要用到jquery.form.js中的$.ajaxSubmit()方法. 插件下载地址: http://plugins.jquery.com/form/ 你的模板XXX.html: <script> function file_upload(){ var

uploadify struts2实现图片上传

uploadify是来自国外的一款优秀的jQuery上传插件,主要功能是批量上传文件,带进度显示. 包括两个版本,一个是Flash的 一个是HTML5的.下面介绍Flash版本如何使用 1.下载 Uploadify Zip 2.解压缩包并上传下列文件到您的网站上的一个文件夹: jquery.uploadify.min.js uploadify.css uploadify-cancel.png uploadify.swf 3.在您使用uploadify页面也不要忘了引入jQuery库 4.在页面引

jQuery上传插件Uploadify出现Http Error 302错误解决

前段时间介绍过jquery uploadify上传插件的使用方法,我在使用中遇到过Http Error 302错误问题,应该会有很多人在使用中遇到过,在此记录下来: 首 先http 302是请求被重定向的意思,这就很容易理解了,如果你的uploadify处理上传脚本有session验证,就会出现此错误,因为flash在执行 post请求的时候没有包含cookie信息,而服务器的session会根据客户端的cookie来得到SESSIONID.没有提交cookie自然 就不能获取到session,