实现springMVC + jsp + ajax 上传文件

实现springMVC + jsp + ajax 上传文件

三种方式:
配置在beans.xml中加入:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
     <property name="maxUploadSize" value="104857600" />
     <property name="maxInMemorySize" value="4096" />
     <property name="defaultEncoding" value="UTF-8"></property>
</bean>
在web.xml中的1下方加入
<!-- 文件上传必须配置 -->
	<multipart-config></multipart-config>
pom.xml中加入依赖:
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.1</version>
</dependency>
Html:
<form name="Form1" action="fileUpload" method="post"  enctype="multipart/form-data">
<h1>采用流的方式上传文件</h1>
<input type="file" name="file">
<input type="submit" value="upload"/>
</form>
 
<form name="Form2" action="fileUpload2" method="post"  enctype="multipart/form-data">
<h1>采用multipart提供的file.transfer方法上传文件</h1>
<input type="file" name="file">
<input type="submit" value="upload"/>
</form>
 
<form name="Form2" action="springUpload" method="post"  enctype="multipart/form-data">
<h1>使用spring mvc提供的类的方法上传文件</h1>
<input type="file" name="file">
<input type="submit" value="upload"/>
</form>
<form name="Form1" action="filesave" method="post"  enctype="multipart/form-data">
<h1>采用流的方式上传文件</h1>
<input type="file" name="file">
<input type="submit" value="upload"/>
</form> 
ajax上传
<script type="text/javascript">
function select() {
	 $('#fi1').click(); 
	    $('#fi1').change(function(){
	    	  var formData = new FormData(form2); 
	    	 $.ajax({  
	            url: 'fileupload3' ,  
	            type: 'POST',  
	            data: formData,
	            contentType: false,  
	            processData: false,
	            success: function (returndata) {  
	            } 
	       });  
	   }); 
}  
 

</script>


<form name="Form2"  id="form2" action="fileupload3" method="post"  enctype="multipart/form-data"> 
 <img onclick="select()" src="theme/addpi/addpicture.jpg" id="big_img" width="418" height="418">
<input type="file" name="file" id="fi1" hidden="hidden">
</form> 
Controller:
/*
     * 通过流的方式上传文件
     * @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象
     */
    @RequestMapping("fileUpload")
    public String  fileUpload(@RequestParam("file") CommonsMultipartFile file) throws IOException {
         
         
        //用来检测程序运行时间
        long  startTime=System.currentTimeMillis();
        System.out.println("fileName:"+file.getOriginalFilename());
        
         
       try {
            //获取输出流
            OutputStream os=new FileOutputStream("E:/"+UUID.randomUUID()+file.getOriginalFilename());
            //获取输入流 CommonsMultipartFile 中可以直接得到文件的流
            InputStream is=file.getInputStream();
            int temp;
            //一个一个字节的读取并写入
            while((temp=is.read())!=(-1))
            {
                os.write(temp);
            }
           os.flush();
           os.close();
           is.close();
         
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        long  endTime=System.currentTimeMillis();
        System.out.println("方法一的运行时间:"+String.valueOf(endTime-startTime)+"ms");
        return "null"; 
    }
    


    /*
     * 采用file.Transto 来保存上传的文件
     */
    @RequestMapping("fileUpload2")
    public String  fileUpload2(@RequestParam("file") CommonsMultipartFile file) throws IOException {
         long  startTime=System.currentTimeMillis();
        System.out.println("fileName:"+file.getOriginalFilename());
        String path="E:/"+UUID.randomUUID()+file.getOriginalFilename();
        File newFile=new File(path);
        //通过CommonsMultipartFile的方法直接写文件(注意这个时候)
        file.transferTo(newFile);
        long  endTime=System.currentTimeMillis();
        System.out.println("方法二的运行时间:"+String.valueOf(endTime-startTime)+"ms");
        return null; 
    }
    


    /*
     *采用spring提供的上传文件的方法
     */
    @RequestMapping("springUpload")
    public String  springUpload(HttpServletRequest request) throws IllegalStateException, IOException
    {
         long  startTime=System.currentTimeMillis();
         //将当前上下文初始化给  CommonsMutipartResolver (多部分解析器)
        CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(
                request.getSession().getServletContext());
        //检查form中是否有enctype="multipart/form-data"
        if(multipartResolver.isMultipart(request))
        {
            //将request变成多部分request
            MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;
           //获取multiRequest 中所有的文件名
            Iterator iter=multiRequest.getFileNames();
             System.out.println(iter);
            while(iter.hasNext())
            {
                //一次遍历所有文件
                MultipartFile file=multiRequest.getFile(iter.next().toString());
                if(file!=null)
                {
                	System.out.println(file.getOriginalFilename());
                    String path="E:/"+UUID.randomUUID()+file.getOriginalFilename();
                    //上传
                    file.transferTo(new File(path));
                } 
            }
        }
        long  endTime=System.currentTimeMillis();
        System.out.println("方法三的运行时间:"+String.valueOf(endTime-startTime)+"ms");
    return null; 
    }
    
@RequestMapping("fileupload3")
public String  fileupload(HttpServletRequest request,HttpServletResponse response) throws Exception {
    //获取服务器中保存文件的路径
 String path = request.getSession().getServletContext().getRealPath("")+"\\theme\\addpi\\";
 System.out.println(path);
  //获取解析器  
    CommonsMultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());  
    //判断是否是文件  
    System.out.println("1");
    System.out.println(resolver.isMultipart(request));
    if(resolver.isMultipart(request)){  
        //进行转换  
    	System.out.println("2");
        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)(request);  
        //获取所有文件名称  
        Iterator<String> it = multiRequest.getFileNames();  
        while(it.hasNext()){  
            //根据文件名称取文件  
            MultipartFile file = multiRequest.getFile(it.next().toString());  
            String fileName = UUID.randomUUID()+file.getOriginalFilename();  
            System.out.println(fileName);
            String localPath = path + fileName;  
            //创建一个新的文件对象,创建时需要一个参数,参数是文件所需要保存的位置
            File newFile = new File(localPath);  
            if (newFile.getParentFile() != null || !newFile.getParentFile().isDirectory()) {
               // 创建父文件夹
               newFile.getParentFile().mkdirs();
            }
            //上传的文件写入到指定的文件中   
            file.transferTo(newFile); 
           }
}
    return null;
}

       @PostMapping("filesave")
public String register(@RequestParam("file") MultipartFile file,MultipartHttpServletRequest request) throws IOException
{
	System.out.println("5");
	//获取初始文件名
	
	String filename=file.getOriginalFilename();
	System.out.println(filename);
	//将选择的文件保存到指定的目录
	file.transferTo(new File("E:/img/"+filename));
	return null;

}

最终结果是将选中的文件上传保存到了E/下,如果需要保存到项目工程的某个目录下可以使用

String path = request.getSession().getServletContext().getRealPath("")+"\theme\addpi\";获取路径,在于文件名拼接即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值