java 异步上传文件

简介:

我们的java上传文件,需要form同步上传,并且需要设置enctype为multipart/form-data。

如果将form使用ajax异步提交的话,将会报错说enctype不是multipart/form-data类型


但有时候确实又有酱紫的需求,可以实现,需要借助jquery.form.js 插件

插件下载地址为:

http://yun.baidu.com/share/link?shareid=1698628055&uk=2836507213


下面贴出关键性代码


jsp代码为:

<form id= "uploadForm">  
      <p >指定文件名: <input type="text" name="filename" value= ""/></p >  
      <p >上传文件: <input type="file" name="file"/></p>  
      <input type="button" value="上传" onclick="doUpload()" />  
</form> 


<script>
 function doUpload(){
	 var formData = new FormData($( "#uploadForm" )[0]);  
     $.ajax({  
          url: '${pageContext.request.contextPath}/UploadHandleServlet' ,  
          type: 'POST',  
          data: formData,  
          async: false,  
          cache: false,  
          contentType: false,  
          processData: false,  
          success: function (returndata) {  
              alert(returndata);  
          },  
          error: function (returndata) {  
              alert(returndata);  
          }  
     });  
 }
</script>


后台代码不变,和普通form上传代码一样

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmss");
String savePath =request.getSession().getServletContext().getRealPath("/WEB-INF/upload");
 File file = new File(savePath);
 if (!file.exists()) {
	 file.mkdir();
 }
 String message ="";
 try{
	  DiskFileItemFactory factory = new DiskFileItemFactory();
	  factory.setSizeThreshold(1024*100); 
	  factory.setRepository(file);
	  
	  ServletFileUpload upload = new ServletFileUpload(factory);
	  upload.setHeaderEncoding("UTF-8"); 
 List<FileItem> list = upload.parseRequest(request);
 
//正则匹配,过滤路径取文件名  
 String regExp = ".+\\\\(.+)$"; 
 Pattern p = Pattern.compile(regExp);
 
 String fileName="";
 for(FileItem item : list){
	 if(item.isFormField()){
		 String name = item.getFieldName();
         String value = item.getString("UTF-8");
         System.out.println(name + "=" + value);
	 }else{
		 String name = item.getName(); 
		 name = name.substring(name.lastIndexOf("\\")+1);
		  fileName = savePath+"/"+ sdf1.format(new Date()) + "_"+name;  
		 item.write(new File(fileName)); 
	 }
	
 }
  message = "文件上传成功!";
 }catch (Exception e) {
	 message= "文件上传失败!";
     e.printStackTrace();
}



亲测有用




      本文转自布拉君君 51CTO博客,原文链接:http://blog.51cto.com/5148737/1774543,如需转载请自行联系原作者





相关文章
|
11天前
|
Java
探索Java新境界!异步+事件驱动,打造响应式编程热潮,未来已来!
【8月更文挑战第30天】在现代软件开发中,系统响应性和可扩展性至关重要。Java作为主流编程语言,提供了多种机制如Future、CompletableFuture及事件驱动编程,有效提升应用性能。本文探讨Java异步编程模型与事件驱动编程,并介绍响应式模式,助您构建高效、灵活的应用程序。
27 3
|
16天前
|
Java Apache 开发工具
【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
【Azure 事件中心】 org.slf4j.Logger 收集 Event Hub SDK(Java) 输出日志并以文件形式保存
|
6天前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
|
4天前
|
Java API 开发者
【Java字节码操控新篇章】JDK 22类文件API预览:解锁Java底层的无限可能!
【9月更文挑战第6天】JDK 22的类文件API为Java开发者们打开了一扇通往Java底层世界的大门。通过这个API,我们可以更加深入地理解Java程序的工作原理,实现更加灵活和强大的功能。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来!
|
20天前
|
Java
Java系列之 重命名文件/图片,renameTo() 方法的使用
这篇文章介绍了Java中File类的renameTo()方法,包括其使用方式、参数、返回值以及一些使用时的注意事项,并通过示例代码演示了如何使用该方法来重命名文件。
Java系列之 重命名文件/图片,renameTo() 方法的使用
|
2天前
|
Java API 开发者
【Java字节码的掌控者】JDK 22类文件API:解锁Java深层次的奥秘,赋能开发者无限可能!
【9月更文挑战第8天】JDK 22类文件API的引入,为Java开发者们打开了一扇通往Java字节码操控新世界的大门。通过这个API,我们可以更加深入地理解Java程序的底层行为,实现更加高效、可靠和创新的Java应用。虽然目前它还处于预览版阶段,但我们已经可以预见其在未来Java开发中的重要地位。让我们共同期待Java字节码操控新篇章的到来,并积极探索类文件API带来的无限可能!
|
3天前
|
算法 Java
Java 压缩文件
在Java中压缩文件是一个常见的需求,通常可以通过使用Java自带的`java.util.zip`包来实现。这个包提供了`ZipOutputStream`类来创建ZIP格式的压缩文件。以下是一个简单的示例,展示了如何将多个文件压缩到一个ZIP文件中。 ### 示例:将多个文件压缩到一个ZIP文件中 ```java import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipFilesExample { public static vo
|
15天前
|
Java 应用服务中间件 HSF
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
Java应用结构规范问题之配置Logback以仅记录错误级别的日志到一个滚动文件中的问题如何解决
|
15天前
|
Java 程序员
Java系统中的错误码设计问题之实现一个基于properties文件的错误消息管理系统如何解决
Java系统中的错误码设计问题之实现一个基于properties文件的错误消息管理系统如何解决
11 1
|
21天前
|
Java
【Java基础面试二】、个Java文件里可以有多个类吗(不含内部类)?
这篇文章讨论了Java文件中类的定义规则,指出一个Java文件可以包含多个类(不包含内部类),但其中最多只能有一个public类,且如果有public类,它的名称必须与文件名一致。
下一篇
DDNS