java 文件上传

java 文件上传
下载
commons-fileupload-1.4.jar
commons-io-2.6.jar

package com.wcsmia.controller;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import com.jfinal.core.Controller;
import com.jfinal.kit.PathKit;
import com.jfinal.render.JsonRender;
import com.jfinal.upload.UploadFile;

public class uploadFileController extends Controller{
	
	private final int maxSize = 100 * 1024 * 1024;
    private String filedir=PathKit.getWebRootPath()+"/text";
    UploadFile  upFile = getFile("fileText",filedir,maxSize,"UTF-8");
	/**单文件上传
     * 1. getFile(String parameterName, String uploadPath);
     * 2. uploadPath参数会指定上传路径,但其指定的前提是基础路径,upload,也就是说指定file路径,然后上传的文件的路径为upload/file;
     * 3. 文件上传的基本路径可以在常量进行配置
     * 
     */
    public void uploadFile(){ 
        /*使用UploadFile获取前台文件
        *第一个参数是页面file的name名,第二个参数是指定保存的文件夹,第三个参数是设置文件的最大值,第四个参数是设置文件的编码方式
        *UploadFile  upFile = getFile("fileText", filedir); //或getFile(getPara("fileText"), filedir); 
        */
        

        /*对文件进行重命名
        *upFile.getFile().renameTo(dest);可使用file的原生方法去对file进行重命名,
        *jf3.1版本已经添加自定义名称功能,所以这个适合3.1之前的版本使用;
        *根据原文件名使用时间戳和随机数重命名,保存,原来的临时文件会自动删除
        */
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
        String fileName = upFile.getFileName();
        String lastThreeLetter = fileName.substring(fileName.lastIndexOf("."));
        String sqlName = sdf.format(new Date())+(int)(Math.random()*10000)+lastThreeLetter;
        upFile.getFile().renameTo(new File(PathKit.getWebRootPath()+"/upload/file/"+sqlName));

        /*
        *上传文件的同时,如果包含其他的携带的变量 的话需要先使用getFile方法,之后才能获取其他的变量参数
        */
        String otherParameter = getPara("otherValue");
        System.out.println("获取到的额外的参数:"+otherParameter);

        /*
         * jf后台在获取文件的时候可直接获取文件文件的修改名称、原名称、上传保存的路径
         *(getUploadPath(),不包含文件,只到达文件夹;getFile()能够直接获取到文件,包括文件名)、
         * 文件的类型(例如jpeg文件格式,获取到的是image/jpeg)
         */
        System.out.println("1:"+upFile.getFileName()+" 2:"+upFile.getOriginalFileName()+" 3:"+upFile.getUploadPath());
        System.out.println("文件:"+upFile.getFile()+" 4:"+upFile.getContentType());

        /*
         * jf获取文件根路径的方法:
         */
        String path = PathKit.getWebRootPath();
        System.out.println(path);

        /*
         * 1.返回的是text/html,前台需使用json工具转换成json对象才能获取数据,var htmlToJson = JSON.parse(data);
         * 2.如果不包含文件上传的form表单提交异步刷新,则直接使用renderJSON(params);
         */
        String params = "{\"ifSuccess\":\"success\"}";
        render(new JsonRender(params).forIE());

    }

    /**多文件上传
    *多文件上传需要在src下面添加com.oreilly.servlet包,添加MultipartRequest.java的类,用于处理多文件重命名问题
    */
    public void moreUploadFile(){ 

        //统一上传到默认的项目根目录
        List<UploadFile>  upFile = getFiles("file");

        //循环遍历获取文件重命名,如果不需要重命名则无需此步骤
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
        String formatTime = sdf.format(new Date());
        for(UploadFile upf: upFile){
            System.out.println("循环获取文件名:"+upf.getFileName());
            //根据原文件名使用时间戳和随机数重命名,保存,原来的临时文件会自动删除
            String fileName = upf.getFileName();
            String lastThreeLetter = fileName.substring(fileName.lastIndexOf("."));
            String sqlName =formatTime + (int)(Math.random()*10000)+lastThreeLetter;
            upf.getFile().renameTo(new File(PathKit.getWebRootPath()+"/upload/file/"+sqlName));
        }

        System.out.println("集合长度:"+upFile.size());
        String params = "{\"ifSuccess\":\"success\"}";
        render(new JsonRender(params).forIE());
    }
}

html代码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
	 <script type="text/javascript" src="js/jquery-form.js"></script>
    <script type="text/javascript"> 
            //单文件上传文件
             function uploadFile(){
                    var form = $("#uploadFile");  
                    var options  = {    
                        url:'Main/User/uploadFile',    
                        type:'post',
                        //data:{},    
                        success:function(data){
                           var htmlToJson = JSON.parse(data);
                           if(htmlToJson.ifSuccess=="success"){
                                  alert("文件上传成功!");
                           } 
                        }                       
                    };    
                    form.ajaxSubmit(options);                
             }

             //多文件上传
             function moreUploadFile(){
                    var form = $("#moreFile");  
                    var options  = {    
                        url:'Main/User/moreUploadFile',    
                        type:'post',
                        //data:{},    
                        success:function(data){
                           var htmlToJson = JSON.parse(data);
                           if(htmlToJson.ifSuccess=="success"){
                                  alert("文件上传成功!");
                           } 
                        }                       
                    };    
                    form.ajaxSubmit(options);                
             } 

    </script>
</head>
<body>
	<form id="uploadFile/uploadFile" enctype="multipart/form-data">
        <span>文件上传:</span>
        <input type="file" id="fileText" name="fileText" placeholder="请选择文件"/><br><br>
        <span>测试其他的参数:</span>
        <input  name="otherValue" value="" placeholder="请输入其余参数"/>
        <a href="javascript:void(0)" onclick="uploadFile()" >上传</a>
    </form>  


    <form id="uploadFile/moreFile" enctype="multipart/form-data">
        <span>多文件上传:</span>
        <input type="file" name="moreFile" multiple="multiple" value="" placeholder="请选择文件"/><br><br>
        <a href="javascript:void(0)" onclick="moreUploadFile()" >上传</a>
    </form>
    12121
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值