js+java多文件上传和下载

页面显示如下:
在这里插入图片描述
前端上传下载代码:

<html>
<head>
    <title>Title</title>
    <meta charset="utf-8">
    <link href="/local/css/bootstrap.min.css?v=3.3.5" rel="stylesheet">
    <link href="/local/css/font-awesome.min.css?v=4.4.0" rel="stylesheet">
    <link href="/local/css/animate.min.css" rel="stylesheet">
    <link href="/local/css/style.min.css?v=4.0.0" rel="stylesheet"><base target="_blank">
</head>
<body>
<form encType="multipart/form-data" id="application_form">
    <input type="file" id="files" multiple onchange=""/><br/><br/>
    <input type="submit" id="fileSubmit" value="提交"/>
</form>

<div id='file-list-display'>
    <button  onclick="download()">下载</button>
</div>
</body>
<script src="/local/js/jquery.min.js?v=2.1.4"></script>
<script src="/local/js/bootstrap.min.js?v=3.3.5"></script>
<script src="/local/js/plugins/validate/jquery.validate.min.js"></script>
<script src="/local/js/plugins/validate/messages_zh.min.js"></script>
<script type="text/javascript">
    function download(){
        var xhr = new XMLHttpRequest();
        xhr.open("GET", "/activity/download", true);
        xhr.responseType = "blob";
        xhr.setRequestHeader("token", window.localStorage.getItem("token"));
        xhr.onload = function () {
            if (this.status == 200) {
                var blob = this.response;
                var reader = new FileReader();
                reader.readAsDataURL(blob);
                reader.onload = function (e) {
                    var a = document.createElement('a');
                    a.download = "test.pdf";
                    a.href = e.target.result;
                    document.body.appendChild(a);
                    a.click();
                    document.body.removeChild(a);
                }
            }
        };
        xhr.send();
    }

    $(document).ready(function () {

        var fileList = [];
        var fileCatcher = document.getElementById('application_form');
        var files = document.getElementById("files"), renderFileList;

        fileCatcher.addEventListener("submit", function (event) {
            event.preventDefault();
            //上传文件
            sendFile();
        });

        files.addEventListener("change", function (event) {
            var flag=0;
            fileList.splice(0,fileList.length);
            for (var i = 0; i < files.files.length; i++) {
                var fileTemp=files.files[i];
                var fileTempName=fileTemp.name;
                var strtype=fileTempName.substring(fileTempName.length-3,fileTempName.length);
                strtype=strtype.toLowerCase();
                if(strtype=="jpg"||strtype=="rar"||
                    strtype=="zip"||strtype=="bmp"||strtype=="png"||
                    strtype=="doc"||strtype=="ppt"||strtype=="pdf")
                    {
                        fileList.push(files.files[i]);
                    }
                else{
                    alert("这种文件类型不允许上传!\r\n" +
                        "只允许上传这几种文件:rar、zip、jpg、bmp、png、doc、ppt、pdf" +
                        "\r\n请选择别的文件并重新上传。");
                    flag=1;
                    $("#files").before("<input type=\"file\" id=\"files\" multiple/>");
                    files.remove();
                    break;
                }
            }
        });

        sendFile = function () {
            var formData = new FormData();
            var request = new XMLHttpRequest();
            //循环添加到formData中
            fileList.forEach(function (file) {
                formData.append('files', file, file.name);
            })
            request.open("POST", "/activity/dome1");
            request.setRequestHeader("token", window.localStorage.getItem("token"));
            request.send(formData);
            console.log(formData)
        }
    })
</script>
</html>

后台上传和下载代码:

package com.ditanshishitong.controller.role;
import com.ditanshishitong.controller.BaseController;
import com.ditanshishitong.model.role.SysFile;
import com.ditanshishitong.utils.OperationFileUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.List;

@Controller
@RequestMapping(value = "/activity")
public class FileController extends BaseController {

    @Value("${file.path}")
    private String filePath;

    @RequestMapping(value = "/dome1", method = RequestMethod.POST)
    public void dome1(HttpServletRequest request, MultipartFile[] files){
        List<SysFile> sysFiles;
        if(files.length>0)
        {
            sysFiles=OperationFileUtils.uploadFile(files,filePath);
            sysFileService.insertFiles(sysFiles);
        }
    }

    @RequestMapping(value = "/download", method = RequestMethod.GET)
    public void download(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String fileName="9979c2db-24df-4747-bdee-e0524664c30a_[哈佛家训大全集(上卷)].邓慧君.扫描版.pdf";
        File file=OperationFileUtils.getTmpFile(fileName,filePath);
        // 读到流中
        InputStream inStream = new FileInputStream(file);// 文件的存放路径
        // 设置输出的格式
        response.reset();
        response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
        // 循环取出流中的数据
        byte[] b = new byte[1024];
        int len;
        try {
            while ((len = inStream.read(b)) > 0)
                response.getOutputStream().write(b, 0, len);
            inStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
package com.ditanshishitong.utils;

import com.ditanshishitong.model.role.SysFile;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class OperationFileUtils {

    //保存文件,将文件保存到服务器上
    public static List<SysFile> uploadFile(MultipartFile[] files, String filePath){
        List<SysFile> sysFiles=new ArrayList<>();
        for(MultipartFile file:files){
            String req= file.getOriginalFilename();
            if(StringUtils.isEmpty(req)){
                continue;
            }
            String tmpFileName = UUID.randomUUID()+"_"+req;
            File tempFile = OperationFileUtils.getTmpFile(tmpFileName,filePath);
            if(!tempFile.exists()){
                tempFile.getParentFile().mkdirs();
                try {
                    tempFile.createNewFile();
                    file.transferTo(tempFile); //到这里tempFile即是上传上来的文件。
                    SysFile sysFile=new SysFile(req,tmpFileName,file.getSize());
                    sysFiles.add(sysFile);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return sysFiles;
    }

    //生成文件
    public static File getTmpFile(String fileName, String filePath) {
        File tmpDir = new File(filePath);
        return new File(tmpDir, fileName);
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
简单的利用javajs实现文件上传 package com.fendou.myString; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; 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.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class FileUpload extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { boolean a=ServletFileUpload.isMultipartContent(request); if(a){ FileItemFactory factory=new DiskFileItemFactory(); ServletFileUpload upload=new ServletFileUpload (factory); Iterator items; try{ items=upload.parseRequest (request).iterator(); while(items.hasNext()){ FileItem item=(FileItem) items.next(); if(!item.isFormField()){ String name=item.getName (); String fileName=name.substring(name.lastIndexOf("\\")+1, name.length()); String path=request.getRealPath("file")+File.pathSeparatorChar+fileName; File uploadFile=new File (path); request.getSession ().setAttribute("file", uploadFile); item.write(uploadFile); response.setContentType ("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out=response.getWriter(); // out.print("<font size='2'> 上传的文件为:"+name+"<br>"); // out.print("保存在服务器上 的地址为:"+path+"</font>"); } } }catch(Exception e){ e.printStackTrace(); } } response.sendRedirect("smartupload.jsp"); } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值