java实现大文件的上传_基于html5+java实现大文件上传实例代码

废话不多说了,直接给大家贴代码了,具体代码如下所示:

html代码如下:

οnchange="onfile(this)">

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);

}

}

}

java代码如下所示:

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对应一个Form表单的输入项

List 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");

这不能添加

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值