Spring MVC异步上传、跨服务器上传和文件下载

这篇具有很好参考价值的文章主要介绍了Spring MVC异步上传、跨服务器上传和文件下载。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、异步上传

之前的上传方案,在上传成功后都会跳转页面。而在实际开发中,很多情况下上传后不进行跳转,而是进行页面的局部刷新,比如:上传头像成功后将头像显示在网页中。这时候就需要使用异步文件上传。

1.1 JSP页面

编写JSP页面,引入jQuery和jQuery表单上传工具jquery.form.js【该js文件已经上传到我的资源,有需要的小伙伴可以自行下载】

upload4.jsp 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>上传</title>
    <script src="/js/jquery-2.1.1.min.js"></script>
    <script src="/js/jquery.form.js"></script>
</head>
<body>
<h3>文件上传</h3>
<form id="ajaxForm" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <%-- 按钮类型不能是submit,否则会刷新页面 --%>
    <input type="button" value="上传头像" id="btn"/>
    <!-- 上传头像后展示的位置 -->
    <img src="/" width="100" id="img">
    <script>
        $(function () {
            $("#btn").click(function () {
                // 异步提交表单
                $("#ajaxForm").ajaxSubmit({
                    url: "/fileUpload4",
                    type: "post",
                    success: function (data) {
                        $("#img").attr("src", data);
                        console.log(data);
                    }
                })
            })
        })
    </script>
</form>
</body>
</html>

1.2 控制器方法

// 接收异步上传请求
    @RequestMapping("/fileUpload4")
    // 不进行页面跳转
    @ResponseBody
    public String upload3(HttpServletRequest request,MultipartFile file) throws Exception{
        // 1.设置上传文件保存的文件夹,存放上传的文件
        String realPath = request.getSession().getServletContext().getRealPath("/upload");
        File dir = new File(realPath);
        if(!dir.exists()){
            dir.mkdirs();
        }

        // 拿到上传文件名
        String filename = file.getOriginalFilename();
        filename = UUID.randomUUID()+"_"+filename;
        // 创建空文件
        File newFile = new File(dir,filename);
        // 将上传的文件写到空文件中
        file.transferTo(newFile);
        System.out.println("/upload/"+filename);
        return "/upload/"+filename;
    }

1.3 测试结果

访问路径:http://localhost:8080/upload4.jsp

Spring MVC异步上传、跨服务器上传和文件下载,ssm框架,# Spring MVC,java,maven,spring,mvc

OK,我们可以看得出来确实只刷新了头像那一部分的页面。本次案例成功实现 

二、跨服务器上传

Spring MVC异步上传、跨服务器上传和文件下载,ssm框架,# Spring MVC,java,maven,spring,mvc

由于文件占据磁盘空间较大,在实际开发中往往会将文件上传到其他服务器中,此时需要使用跨服务器上传文件。

2.1 修改tomcat的部分配置

1. 解压tomcat作为图片服务器,在tomcat的webapps下创建upload目录作为文件上传目录。

Spring MVC异步上传、跨服务器上传和文件下载,ssm框架,# Spring MVC,java,maven,spring,mvc

这是我自己的tomcat安装目录,新建一个upload文件夹。 

2. 修改tomcat的 conf/web.xml 文件,支持跨服上传。

<servlet>  
  <init-param>    
    <param-name>readonly</param-name>
    <param-value>false</param-value> 
  </init-param>
</servlet>

3. 修改tomcat的 conf/server.xml 文件,修改tomcat端口,修改完开启tomcat服务器,如下图:

<Connector port="8081" protocol="HTTP/1.1"connectionTimeout="20000" redirectPort="8443" />

 Spring MVC异步上传、跨服务器上传和文件下载,ssm框架,# Spring MVC,java,maven,spring,mvc

 双击运行

Spring MVC异步上传、跨服务器上传和文件下载,ssm框架,# Spring MVC,java,maven,spring,mvc

出现该页面,不要关闭这个页面!!! 

2.2 JSP页面

这里的内容和上面的JSP没有区别!只是响应的路径不一样。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>上传</title>
    <script src="/js/jquery-2.1.1.min.js"></script>
    <script src="/js/jquery.form.js"></script>
</head>
<body>
<h3>文件上传</h3>
<form id="ajaxForm" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <%-- 按钮类型不能是submit,否则会刷新页面 --%>
    <input type="button" value="上传头像" id="btn"/>
    <!-- 上传头像后展示的位置 -->
    <img src="/" width="100" id="img">
    <script>
        $(function () {
            $("#btn").click(function () {
                // 异步提交表单
                $("#ajaxForm").ajaxSubmit({
                    url: "/fileUpload5",
                    type: "post",
                    success: function (data) {
                        $("#img").attr("src", data);
                        console.log(data);
                    }
                })
            })
        })
    </script>
</form>
</body>
</html>

2.3 添加依赖

这里我们需要在pom.xml添加跨服上传依赖

    <!-- 跨服上传 -->
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-core</artifactId>
      <version>1.18.1</version>
    </dependency>
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-client</artifactId>
      <version>1.18.1</version>

2.4 控制器方法

创建控制器方法,该方法在接受到上传请求后将文件保存到其他服务器上。

    // 该方法接收到上传请求后将文件保存到其他服务器上
    @RequestMapping("/fileUpload5")
    @ResponseBody
    public String upload4(HttpServletRequest request,MultipartFile file) throws Exception{
        // 设置跨服上传的服务器路径
        String path = "http://localhost:8081/upload/";
        // 获取上传的文件名
        String filename = file.getOriginalFilename();
        filename = UUID.randomUUID()+"_"+filename;
        
        // 跨服上传:
        // 1.创建客户端对象
        Client client = Client.create();
        // 2.使用客户端对象连接图片服务器
        WebResource resource = client.resource(path+filename);
        // 3.传输数据
        resource.put(file.getBytes());
        System.out.println(path+filename);
        return path+filename;
    }

2.5 测试结果 

访问路径:http://localhost:8080/upload5.jsp

Spring MVC异步上传、跨服务器上传和文件下载,ssm框架,# Spring MVC,java,maven,spring,mvc

可以看得到确实成功上传到了服务器上面的upload目录下

三、文件下载

将文件上传到服务器后,有时我们需要让用户下载上传的文件,接下来我们编写文件下载功能:

3.1 查询可下载文件方法

编写控制器方法,查询所有可下载的文件(我这里是查询存放在/webapps/upload/目录下的图片),并跳转到下载页面

// 查询可下载的文件
    @RequestMapping("/showFiles")
    public String showFileDown(HttpServletRequest request, Model model){
        // 1.获取下载文件路径集合。注:跨服务器上传中,网络路径无法获取文件列表。
        String path = request.getSession().getServletContext().getRealPath("/upload");
        File file = new File(path);
        String [] files = file.list();
        // 2.将路径放入模型中,跳转到JSP页面
        model.addAttribute("files",files);
        return "download";
    }

3.2 添加JSTL依赖

    <!-- 添加JSTL依赖 -->
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-spec</artifactId>
      <version>1.2.5</version>
    </dependency>
    <dependency>
      <groupId>org.apache.taglibs</groupId>
      <artifactId>taglibs-standard-impl</artifactId>
      <version>1.2.5</version>
    </dependency>

3.3 编写下载页面

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>下载</title>
</head>
<body>
<h3>文件下载</h3>
<%-- 遍历文件集合  --%>
<c:forEach items="${files}" var="file">
    <a href="/download?fileName=${file}">${file}</a><br/>
</c:forEach>
</body>
</html>

3.4 下载控制器方法

    // 文件下载
    @RequestMapping("/download")
    public void fileDown(HttpServletRequest request, HttpServletResponse response,String fileName) throws Exception{
        // 设置响应头
        response.setHeader("Content-Disposition","attachment;filename="+fileName);
        // 获取文件路径
        String path = request.getSession().getServletContext().getRealPath("/upload");
        File file = new File(path,fileName);
        // 获取字节输出流
        ServletOutputStream os = response.getOutputStream();

        // 使用输出流写出文件
        os.write(FileUtils.readFileToByteArray(file));
        os.flush();
        os.close();
    }

3.5 测试结果

OK,我们先来访问http://localhost:8080/showFiles

查询出所有可以下载的文件:然后点击下载也是可以成功下载,文件的上传和下载就学习到这里了。

Spring MVC异步上传、跨服务器上传和文件下载,ssm框架,# Spring MVC,java,maven,spring,mvc

往期专栏&文章相关导读 

     大家如果对于本期内容有什么不了解的话也可以去看看往期的内容,下面列出了博主往期精心制作的Maven,Mybatis等专栏系列文章,走过路过不要错过哎!如果对您有所帮助的话就点点赞,收藏一下啪。其中Spring专栏有些正在更,所以无法查看,但是当博主全部更完之后就可以看啦。

1. Maven系列专栏文章

Maven系列专栏 Maven工程开发
Maven聚合开发【实例详解---5555字】

2. Mybatis系列专栏文章

Mybatis系列专栏 MyBatis入门配置
Mybatis入门案例【超详细】
MyBatis配置文件 —— 相关标签详解
Mybatis模糊查询——三种定义参数方法和聚合查询、主键回填
Mybatis动态SQL查询 --(附实战案例--8888个字--88质量分)
Mybatis分页查询——四种传参方式
Mybatis一级缓存和二级缓存(带测试方法)
Mybatis分解式查询
Mybatis关联查询【附实战案例】
MyBatis注解开发---实现增删查改和动态SQL
MyBatis注解开发---实现自定义映射关系和关联查询

3. Spring系列专栏文章

Spring系列专栏 Spring IOC 入门简介【自定义容器实例】
IOC使用Spring实现附实例详解
Spring IOC之对象的创建方式、策略及销毁时机和生命周期且获取方式
Spring DI简介及依赖注入方式和依赖注入类型
Spring IOC相关注解运用——上篇
Spring IOC相关注解运用——下篇
Spring AOP简介及相关案例
注解、原生Spring、SchemaBased三种方式实现AOP【附详细案例】
Spring事务简介及相关案例
Spring 事务管理方案和事务管理器及事务控制的API
Spring 事务的相关配置、传播行为、隔离级别及注解配置声明式事务

4. Spring MVC系列专栏文章   

SpringMVC系列专栏 Spring MVC简介附入门案例
Spring MVC各种参数获取及获取方式自定义类型转换器和编码过滤器
Spring MVC获取参数和自定义参数类型转换器及编码过滤器
Spring MVC处理响应附案例详解
Spring MVC相关注解运用 —— 上篇

Spring MVC相关注解运用 —— 中篇文章来源地址https://www.toymoban.com/news/detail-562508.html

Spring MVC相关注解运用 —— 下篇
Spring MVC多种情况下的文件上传
Spring MVC异步上传、跨服务器上传和文件下载
Spring MVC异常处理【单个控制异常处理器、全局异常处理器、自定义异常处理器】
Spring MVC拦截器和跨域请求
SSM整合案例【C站讲解最详细流程的案例】

到了这里,关于Spring MVC异步上传、跨服务器上传和文件下载的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java从sftp服务器上传与下载文件

    业务需要从sftp服务器上上传、下载、删除文件等功能,通过查阅资料及手动敲打代码,实现了操作sftp的基本功能,有需求的小伙伴可以看看具体的实现过程。 摘自百度百科:SSH文件传输协议,是一种数据流链接,提供文件访问、传输和管理功能的网络传输协议。 SFTP允许用

    2024年02月11日
    浏览(62)
  • Java从ftp服务器上传与下载文件

    业务需要从ftp服务器上上传、下载、删除文件等功能,通过查阅资料及手动敲打代码,实现了操作ftp的基本功能,有需求的小伙伴可以看看具体的实现过程。 摘自百度百科:文件传输协议(File Transfer Protocol,FTP)是用于在 网络 上进行文件传输的一套标准协议,FTP允许用户以

    2024年02月07日
    浏览(66)
  • 在Linux系统(服务器)使用阿里云盘服务快速上传下载文件

    使用集群服务器的时候,尤其是当服务器有多个节点时有些复杂,连接集群我们一般用xshell,传输文件我们一般使用Xftp,一般对于单个节点服务器来说是方便的,使用Xftp还可以可视化本地和服务器端的文件,但当有多个节点时,这就不适用了,他不能选择节点,有局限,连接

    2024年02月04日
    浏览(53)
  • 怎么用SecureCRT从Linux服务器上传、下载文件?

    我们在使用linux的过程中,不论是为了安装相关软件,还是其它目的,都可能需要上传或者下载linux上的文件。这里演示一下在SecureCRT中向linux上传和下载文件。 1、前言 需要上传或者下载,需要使用rz和sz命令。如果linux上没有这两个命令工具,则需要先安装(可以使用yum安装

    2024年02月04日
    浏览(54)
  • 用mac终端给Linux服务器上传、下载文件

    一、 (1)打开终端,在shell菜单下找到:\\\"新建远程连接\\\"。 (2)在\\\"新建远程连接\\\"下,找到\\\"安全文件传输(sftp)\\\"。  (3)新建新的IP,输入用户,点击\\\"连接\\\",输入密码,进入sftp传输界面。 (4) 上传mac本地文件至Linux服务器:put localfiledirectory remotefiledirectory 下载Linux服务器

    2024年02月16日
    浏览(52)
  • MacBook 往服务器上传、下载文件的几种操作

    往服务器传文件、下载文件有很多种方法,可以使用scp、rsync或者rs/sz MacBook上的rz和sz 配置起来比较麻烦 这里就不说了 另外 研发和测试同学可能对于scp命令和rsync命令并不了解 这里也不说了 这里直说两种图形化界面的工具 通过jumpserver登录服务器后 可以简单快速实现上传和

    2024年02月16日
    浏览(63)
  • 服务器文件上传后,客户端下载-webscoket一对一

    主要端末:小程序 云服务器 客户端A 客户端B 客户端C 流程: 1.小程序用户将文件通过小程序上传至云服务器,同时发送一个websocket,内部端口 2.云服务器与客户端ABC建立webscoket连接 3.当小程序用户需要上传到指定的客户端A电脑上的时候,我们通过webscoket只针对客户端A发送指

    2024年02月14日
    浏览(36)
  • [Python http.server] 搭建http服务器用于下载/上传文件

    动机: 笔者需测试bs架构下的文件上传与下载性能,故想通过Python搭建http服务器并实现客户端与服务器之间的文件上传和下载需求 难点: 这应该是很基础的东西,不过笔者之前未接触过http编程,谨在此记录下学习的过程,可能不是最优解 方法: 在服务器端部署html页面,并

    2024年02月11日
    浏览(44)
  • scp命令-远程服务器与本地之间的文件上传与下载操作

    scp命令在linux中,比较方便。下面是例子。 -p -- ssh的端口,不写的话默认就是22。 /Users/zangcc/Desktop/hello.zip -- 本地的桌面文件hello.zip。 root@服务器ip:/root/tools -- 上传到远程服务器的/root/tools下。 通俗的讲:将本地桌面的hello.zip上传到服务器的/root/tools目录。 -p -- ssh的端口,不

    2024年02月13日
    浏览(53)
  • 三分钟用Golang搭建一个HTTP文件上传下载服务器

    简单需要一个文件服务器来传递数据,只要两个功能,一个上传接口,一个下载接口。 选用go http模块实现,比nginx、ftp等更方便快捷。 上传接口\\\"/v1/file_upload/\\\" 上传接口增加简单BasicAuth鉴权 上传成功返回下载URL json格式返回 只想文件上传服务器测试接口,以下电梯直达即可

    2024年02月11日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包