html5+java大文件上传代码

 <body>
		<input  type="file" accept="video/*;capture=camera"
			onchange="onfile(this)">
		<input  type="button" value="提交">

		<script type="text/javascript">
var xhr;
function onfile(file) {
	var fd = new FormData();
	fd.append("fileToUpload", document.getElementById('fileid').files[0]);
	xhr = new XMLHttpRequest();
	xhr.open("POST", "http://localhost:8889/TestUp/upservlet");
	//xhr.setRequestHeader("Content-Type","charset=UTF-8");
	xhr.send(fd);
	xhr.onreadystatechange = processResponse;
}

function processResponse(){
	if(xhr.readyState == 4){
        alert("上传结束数据流结束");
        if(xhr.status == 200){
        	var infor = xhr.responseText;
            alert("服务器端的响应 = "+infor);
        }
    }
}

</script>
	</body>
package com.yjm.up;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UpServlet extends HttpServlet {

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全
		String savePath = this.getServletContext().getRealPath(
				"/WEB-INF/upload");
		File file = new File(savePath);
		System.out.println("test。。。。");
		// 判断上传文件的保存目录是否存在
		if (!file.exists() && !file.isDirectory()) {
			System.out.println(savePath + "目录不存在,需要创建");
			// 创建目录
			file.mkdir();
		}
		// 消息提示
		String message = "";
		try {
			// 使用Apache文件上传组件处理文件上传步骤:
			// 1、创建一个DiskFileItemFactory工厂
			DiskFileItemFactory factory = new DiskFileItemFactory();
			// 2、创建一个文件上传解析器
			ServletFileUpload upload = new ServletFileUpload(factory);
			// 解决上传文件名的中文乱码
			upload.setHeaderEncoding("UTF-8");
			// 3、判断提交上来的数据是否是上传表单的数据
			if (!ServletFileUpload.isMultipartContent(request)) {
				// 按照传统方式获取数据
				return;
			}
			// 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
			List<FileItem> list = upload.parseRequest(request);
			for (FileItem item : list) {
				// 如果fileitem中封装的是普通输入项的数据
				if (item.isFormField()) {
					String name = item.getFieldName();
					// 解决普通输入项的数据的中文乱码问题
					String value = item.getString("UTF-8");
					// value = new String(value.getBytes("iso8859-1"),"UTF-8");
					System.out.println(name + "=" + value);
				} else {// 如果fileitem中封装的是上传文件
					// 得到上传的文件名称,
					String filename = item.getName();
					System.out.println(filename);
					if (filename == null || filename.trim().equals("")) {
						continue;
					}
					// 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:
					// c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
					// 处理获取到的上传文件的文件名的路径部分,只保留文件名部分
					filename = filename
							.substring(filename.lastIndexOf("\\") + 1);
					// 获取item中的上传文件的输入流
					InputStream in = item.getInputStream();
					// 创建一个文件输出流
					FileOutputStream out = new FileOutputStream(savePath + "\\"
							+ filename);
					// 创建一个缓冲区
					byte buffer[] = new byte[1024 * 1024];
					// 判断输入流中的数据是否已经读完的标识
					int len = 0;
					// 循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
					while ((len = in.read(buffer)) > 0) {
						// 使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\"
						// + filename)当中
						out.write(buffer, 0, len);
					}
					out.flush();
					// 关闭输入流
					in.close();
					// 关闭输出流
					out.close();
					// 删除处理文件上传时生成的临时文件
					item.delete();
					message = "文件上传成功!";
				}
			}
		} catch (Exception e) {
			message = "文件上传失败!";
			e.printStackTrace();

		}
		request.setAttribute("message", message);
		request.getRequestDispatcher("/message.jsp").forward(request, response);
	}
}

用到的java 包 是 超过1G上传

commons-fileupload-1.2.1.jar

commons-io-1.3.2.jar

//xhr.setRequestHeader("Content-Type","application/octet-stream;charset=UTF-8"); 
这不能添加
更多相关文章
  • 原创用JAVA实现大文件上传及显示进度信息
    用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议  (本文提供全部源码下载,请访问 https://github.com/grayprince/UploadBigFile) 一. 大文件上传基础描述: 各种WEB框架中,对于浏览器上传文件的请求,都有自己的处理对象负 ...
  • 结合Resumable.js实现在Server端PHP支持的大文件上传、断点续传功能
       作为一个php开发猿来说,文件上传是常见的问题.在处理小文件上传的时候还得心应手,可能在面对大文件几百M或者上G的文件,如果这时候还使用对待小文件的处理方式,这个时候会不会出现问题呢?如果文件很大上传过程中超时或者上传过程中断电!此时就需要我们提供断点续传功能了.php猿们考虑一下,该如何实现 ...
  • 今天遇到一个问题,就是“NeatUpload大文件上传控件而导致Nonfile portion > 4194304 bytes错误”,百度后发现了一个解决方法,跟大家分享下: NeatUpload是一个开源的大文件上传控件,非常的强大,支持文件类型过滤.上传进度条显示.多文件上传等强大的功能. ...
  • 在 ASP.NET 开发的过程中,文件上传往往使用自带的 FileUpload 控件,可是用过的人都知道,这个控件的局限性十分大,最大的问题就在于上传大文件时让开发者尤为的头疼,而且,上传时无法方便的做到多线程的操控和上传进度的显示.在此给大家推荐一款简单易用的上传组件,从而快速便捷得解决了 ASP ...
  • 原文:http://www.verydemo.com/demo_c143_i23854.html   我们在 multifile 中可以很容易的发现如何使用,这里就简单说说了,首先在页面上我们需要有这样几行标签代码 <!-- 注意这里的attach名字为固定,如果要控制上传的格式,则追加acc ...
  • ******作者语:这个控件很早就写了,但一直没有去完善*****************************现在重新整理了一次,应该方便了许多,希望大家多多提意见********* ******该版本支持ASPNET1.0.2.0 ************************支持多个大文件 ...
  • PHP用超级全局变量数组$_FILES来记录文件上传相关信息的,在php文件上传之前,可通过调节php.ini中相关配置指令,来控制上传相关细节. 1.file_uploads=on/off   是否允许通过http方式上传文件 2.max_execution_time=30   允许脚本最大执行时 ...
  • 文件and文件夹copy package org.test; import java.io.*; public class FileCopy { /** * 复制单个文件 * * @param oldPath * String 原文件路径 如:D:\\bbbb\\ssss.txt * @param ...
一周排行