springboot项目关于文件的上传与下载

springboot页面需要实现文件的上传与下载

贴出部分代码

html代码

文件的下载

        <form target="name" id="download_dubbo_form" name="download_dubbo_form" method="post" action="/jfpointscore-test/download">
               <button id="download_dubbo_config" type="button" class="btn btn-default download_dubbo_config" onclick="download_dubbo_config2();">下载</button>
        </form>

文件的上传

            <form id="upload_dubbo_form" name="upload_dubbo_form" method="post" enctype="multipart/form-data">
                <div class="upload_dubbo_container_div">
                    <font class="upload_dubbo_container_font">请上传dubbo配置:</font><input type="file" id="file" name="file" multiple="multiple" class="btn btn-default upload_dubbo_container_button"/>
                </div>
                <div class="upload_dubbo_container_div">
                    <font class="upload_dubbo_container_font">请上传facade包:</font><input type="file" id="file" name="file" multiple="multiple" class="btn btn-default upload_dubbo_container_button"/>
                </div>
            </form>

js部分

下载按钮

//下载按钮
function download_dubbo_config2(){
    $.ajax({
        type: "post",
        url: url,
        cache: false,
        async : false,
        timeout: 15000,          // 设置超时时间
        success: function (data ,textStatus, jqXHR)
        {
            if (textStatus == "success") {
                $("#download_dubbo_form").submit();
            }
        },
        error:function (XMLHttpRequest, textStatus, errorThrown) {
            console.log("请求失败!");
        },
        complete: function (XMLHttpRequest,status) {
            if(status == ‘timeout‘) {
                console.log("网络超时,请刷新");
            }
        }
     });
}

上传按钮

//上传按钮
function upload_dubbo_config(){ var formData = new FormData($("#upload_dubbo_form")[0]);  //重点:要用这种方法接收表单的参数
    $.ajax({
        type: "post",
        url: url,
        cache: false,
        data: formData,
        async : true,
        timeout: 15000,          // 设置超时时间
        // 告诉jQuery不要去处理发送的数据
        processData : false,
        // 告诉jQuery不要去设置Content-Type请求头
        contentType : false,
        success: function (data ,textStatus, jqXHR)
        {
            if (parseInt(data) == 1) {
                complete = 1;
            }
        },
        error:function (XMLHttpRequest, textStatus, errorThrown) {
            console.log("请求失败!");
        },
        complete: function (XMLHttpRequest,status) {
            if(status == ‘timeout‘) {
                console.log("网络超时,请刷新");
            }
        }
     });

}

后台代码部分需要自行修改,大体代码如下:

package com.jfpointscore.controller;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import com.jfpointscore.entity.common.JsonResponse;

@RestController
public class FileController {

    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    @ResponseBody
    public String handleFileUpload(HttpServletRequest request){
        List<MultipartFile> files = ((MultipartHttpServletRequest)request).getFiles("file");
        MultipartFile file = null;
        BufferedOutputStream stream = null;
        for (int i =0; i< files.size(); ++i) {
            file = files.get(i);
            if (!file.isEmpty()) {
                try {
                   BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File("D:\\logs\\" + file.getOriginalFilename())));
                   bufferedOutputStream.write(file.getBytes());
                   bufferedOutputStream.flush();
                   bufferedOutputStream.close();
                } catch (Exception e) {
                    return "You failed to upload " + i + " => " + e.getMessage();
                }
            } else {
                return "You failed to upload " + i + " because the file was empty.";
            }
        }
        return "1";
    }

//    //文件下载相关代码
//    //@RequestMapping(value = "/download",method = RequestMethod.POST)
//    public String download(@RequestBody Map<String, String> map) throws Exception {
//        String url = map.get("url");
//        BufferedInputStream bis = null;
//        BufferedOutputStream bos = null;
//        //获取下载文件露肩
//        String downLoadPath = "C:\\Users\\Island\\Desktop\\1533471907(1).png";
//        /*response.setHeader("content-type", "application/octet-stream");
//        //获取文件的长度
//        long fileLength = new File(downLoadPath).length();
//        //设置文件输出类型
//        response.setContentType("application/octet-stream");
//        //设置输出长度
//        response.setHeader("Content-Length", String.valueOf(fileLength));*/
//    /********************************************************************/
//        //获取输入流
//        bis = new BufferedInputStream(new FileInputStream(downLoadPath));
//        //输出流
//        bos = new BufferedOutputStream(new FileOutputStream(new File(url+"\\test.png")));
//        byte[] buff = new byte[2048];
//        int bytesRead;
//        while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
//            bos.write(buff, 0, bytesRead);
//        }
//        //关闭流
//        bis.close();
//        bos.close();
//    return "1";
//}

    @RequestMapping(value = "/download",method = RequestMethod.POST)
    public ResponseEntity<JsonResponse> download(HttpServletRequest req,HttpServletResponse response){
        JsonResponse jr = new JsonResponse();
        String path = "C:\\Users\\Island\\Desktop\\winscp-download.bat";
//        String path = null;
        try {
            File file = new File(path);
            long size = file.length();
            String fileName = new String("winscp-download.bat".getBytes("UTF-8"), "iso-8859-1");//为了解决中文名称乱码问题
            response.reset();
            response.setHeader("Accept-Ranges", "bytes");
            //设置文件下载是以附件的形式下载
            response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", fileName));
            response.addHeader("Content-Length", String.valueOf(size));

            ServletOutputStream sos = response.getOutputStream();
            FileInputStream in = new FileInputStream(file);
            BufferedOutputStream outputStream = new BufferedOutputStream(sos);
            byte[] b = new byte[1024];
            int i = 0;
            while ((i = in.read(b)) > 0) {
                outputStream.write(b, 0, i);
            }
            outputStream.flush();
            sos.close();
            outputStream.close();
            in.close();
            jr.setStatus("00");
        } catch (Exception e) {
            System.out.println(e);
            jr = null;
        }
        return ResponseEntity.ok(jr);
    }

}

原文地址:https://www.cnblogs.com/huangtao1927/p/9508930.html

时间: 2024-10-09 21:01:52

springboot项目关于文件的上传与下载的相关文章

SpringMVC实现文件的上传和下载

前些天一位江苏经贸的学弟跟我留言问了我这样一个问题:"用什么技术来实现一般网页上文件的上传和下载?是框架还是Java中的IO流".我回复他说:"使用SpringMVC框架可以做到这一点,因为SpringMVC为文件的上传提供了直接的支持,但需要依赖Apache提供Commons FileUpload组件jar包."鉴于这个问题,我上网也百度了一下,网上很多都是介绍的使用IO流来实现文件的上传和下载,也有说到框架的,但介绍的并不是很完整,今天小钱将和大家介绍使用Spr

iOS开发中文件的上传和下载功能的基本实现-备用

感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: 复制代码代码如下: YYViewController.m#import "YYViewController.h" #define YYEnc

java实现ftp文件的上传与下载

最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 2.然后是相关类的代码 /** * ftp链接常量 * */ public class Ftp { private String ipAddr;//ip地址 private Integer port;//端口号 private String userName;//用户名 private Strin

Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载

Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载 2018年5月26日 19:03 阅读 375 评论 7 我本地和服务器的连接一直使用的是 Xshell 5,而在与服务器进行文件操作的时候使用的是 Xshell 推荐安装的一个工具 Xftp 5,然而,昨天自己想着从服务器下载备份好的的数据库文件到本地的时候发现这个文件传输工具居然过期不能用了,好气啊!于是没办法(机智如我)只好用 Python 来实现 SSH 的连接,顺便从服务器批量下载一些文件,实现自动化. 项

Spring MVC 实现文件的上传和下载

文件上传是项目开发中最常见的功能.为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data.只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器. 一旦设置了enctype为multipart/form-data,浏览器即会采用二进制流的方式来处理表单数据,而对于文件上传的处理则涉及在服务器端解析原始的HTTP响应.在2003年,Apache Software Foundation发布了开源的Commons File

.net web开发——文件的上传和下载

以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备文件上传的API #region 文件上传  可以带参数 [HttpPost("upload")] public JsonResult uploadProject(IFormFile file, string userId) { if (file != null) { var fileDir = "D:\\aaa"

使用Loadrunner进行文件的上传和下载

最近使用loadrunner中需要录制文件的上传和下载,上传功能模块利用录制可以直接实现,下载无法实现,在网上找到了一段代码,自己动手试验了下,发现没有用 辛苦找到的,还是记录下吧 (1)LoadRunner上传文件 web_submit_data("importStudent.do", "Action=https://testserver/console/importStudent.do", "Method=POST", "EncTy

【Linux命令】--(4)文件打包上传和下载

文件打包上传和下载 +++++++++++++++++++++++++++++++用SecureCRT来上传和下载文件tar命令gzip命令+++++++++++++++++++++++++++++++先把计划放着,待老夫国庆把它学完!

【php】文件的上传与下载

一. 生活中常见的地方: a) 例如邮箱.空间.文库.百度云.微爱等地方,都可以看到文件的上传和下载的应用,因此,上传和下载的功能非常重要!二. PHP当中的文件上传和下载 a) 我们需要进行一些设置,来使我们的表单具有提交文件的功能! b) 客户端的设置: i. 其实就是表单的设置: 1. input表单项中的type属性值必须是file类型 2. form表单头部需要添加一个通行证:enctype="multipart/form-data",含义为让服务器认识到我们要在这个表单中上