网页文件
<!doctype html>
<html>
<head>
<Meta charset="utf-8">
<Meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<Meta name="viewport" content="width=device-width,initial-scale=1">
<title>利用Ajax上传二进制文件</title>
<script type="text/javascript"> window.onload = function() { var file = null,fileName = null,xhr = null; function upload(url) { var fileInput = document.getElementById("fileInput"); fileInput.addEventListener("change",function() { file = this.files[0]; fileName = file.name; xhr = new XMLHttpRequest(); xhr.open("POST",url); // 这里会自动设置好请求头 xhr.send(file); // 直接上传二进制文件 },false); } var uploadBtn = document.getElementById("upload"); uploadBtn.onclick = function() { upload("/Ajax/FileUploader"); }; }; </script>
</head>
<body>
<input type="file" id="fileInput" multiple="multiple" />
<input type="button" id="upload" value="click to upload" />
</body>
</html>
后台简单处理
package cn.chd.fileupload;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** * Servlet implementation class FileUploader */
public class FileUploader extends HttpServlet {
private static final long serialVersionUID = 1L;
int count = 1;
protected void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException {
String path = this.getServletContext().getRealPath("/upload");
InputStream in = request.getInputStream();
String contentType = request.getContentType();
// 这里是为了获取文件扩展名,有点小问题
String extention = contentType.substring(contentType.indexOf('/') + 1);
OutputStream out = new FileOutputStream(path + "\\" + (count++) + "." + extention);
int len = -1;
byte[] buffer = new byte[1024];
while ((len = in.read(buffer)) != -1) {
out.write(buffer,0,len);
}
in.close();
out.close();
}
protected void doPost(HttpServletRequest request,IOException {
doGet(request,response);
}
}