利用Ajax上传二进制文件

网页文件

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

}

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...