java实现文件上传下载功能

本文实例为大家分享了java实现文件上传下载的具体代码,供大家参考,具体内容如下

1.上传单个文件

Controller控制层

import java.io.File;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
@RequestMapping("testup")
public class UploadController {
    private static Logger LG= LoggerFactory.getLogger(UploadController.class);
    /**
     * 9.①单个文件上传
     * @param file
     * @param redirectAttributes
     * @return
     */
    @RequestMapping(value="/upload",method=RequestMethod.POST,consumes="multipart/form-data")
    public String uploadFile(@RequestParam MultipartFile file,RedirectAttributes redirectAttributes){
        if(file.isEmpty()){
            redirectAttributes.addFlashAttribute("message", "Plse select file");
            return "redirect:/test/index";
        }
        try {
            String fileName=file.getOriginalFilename();
            /*上传文件存储位置*/
            String destFileName="D:\\whupload"+File.separator+fileName;
            File destFile=new File(destFileName);
            file.transferTo(destFile);
            //文件上传成功显示
            //redirectAttributes.addAttribute("message","upload file success.");
            redirectAttributes.addFlashAttribute("message", "upload file success.");
        } catch (Exception e) {
            //文件上传失败显示
            redirectAttributes.addFlashAttribute("message", "upload file fail");
            LG.debug(e.getMessage());
        }
        return "redirect:/test/index";
    }

}

前端页面源码

<p>上传文件,使用multipart/form-data类型</p>
  <form action="/testup/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <button type="submit">上传</button>
</form>

2.上传多个文件

Controller控制层

import java.io.File;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
@RequestMapping("testup")
public class UploadController {
    private static Logger LG= LoggerFactory.getLogger(UploadController.class);

    /**
     * 9.②多个文件上传
     */
    @RequestMapping(value="/uploadBatchFile",method=RequestMethod.POST,consumes="multipart/form-data")
    public String uploadBatchFile(@RequestParam MultipartFile[] files,RedirectAttributes redirectAttributes){
        boolean isEmpty=true;
        try {
            for (MultipartFile multipartFile : files) {
                if(multipartFile.isEmpty()){
                    continue;
                }
                String fileName=multipartFile.getOriginalFilename();
                String destFileName="D:\\whupload"+File.separator+fileName;
                File destFile=new File(destFileName);
                multipartFile.transferTo(destFile);
                isEmpty=false;
            }
            //int i=1/0;
            //localhost:8086/test/index?message=upload file success
            //redirectAttributes.addAttribute("message","upload file success.");

        } catch (Exception e) {
            // TODO Auto-generated catch block
            redirectAttributes.addFlashAttribute("message", "upload file fail");
            LG.debug(e.getMessage());
            return "redirect:/test/index";
        }
        if(isEmpty){
            redirectAttributes.addFlashAttribute("message", "Plse select file");
        }else{
            redirectAttributes.addFlashAttribute("message", "upload file success.");
        }
        return "redirect:/test/index";
    }

}

前端页面源码

<form action="/testup/uploadBatchFile" method="post" enctype="multipart/form-data">
        <input type="file" name="files">
        <input type="file" name="files">
        <button type="submit">上传</button>
</form>

3.下载文件

Controller控制器

import java.io.File;
import java.net.MalformedURLException;
import java.nio.file.Paths;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("testup")
public class UploadController {
    private static Logger LG= LoggerFactory.getLogger(UploadController.class);

    /**
     * 10.下载文件
     */
    @RequestMapping("/download")
    @ResponseBody
    public ResponseEntity<Resource> downloadFile(@RequestParam String fileName){
        try {
            Resource resource=new UrlResource(
                    //拼接下载的文件的原路径
                    Paths.get("D:/whupload"+File.separator+fileName).toUri());
            if(resource.exists() && resource.isReadable()){
                return ResponseEntity.ok()
                        .header(HttpHeaders.CONTENT_TYPE, "application/octet-stream")
                        .header(HttpHeaders.CONTENT_DISPOSITION,"attachment;filename=\""+
                                resource.getFilename()+"\"").body(resource);

            }
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            LG.debug(e.getMessage());
        }
        return null;
    }
}

前端页面源码

<p>下载文件,这里设置默认下载文件为Demo.txt,fileName是下载文件名</p>
<a href="/testup/download?fileName=Demo.txt" rel="external nofollow" >download file</a>

运行效果

最后,需要注意的是,文件上传有默认的大小限制
在配置文件中加入,即可消除限制

spring.servlet.multipart.max-file-size=-1
spring.servlet.multipart.max-request-size=-1

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • springboot多文件上传实现使用postman测试多文件上传接口

    使用postman测试多文件上传接口 1.创建测试类(FileController.java) package com.jeff.controller; import java.io.File; import java.io.IOException; import java.util.List; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annot

  • Java实例讲解文件上传与跨域问题

    目录 了解MultipartFile接口 文件上传业务代码 Controller类 Service类 修改nginx配置 如何绕过网关 1.在网关中配置白名单 2.在nginx做转发 解决上传文件出现跨域问题 写配置类CorsFilter 在nginx配置中配置请求实体大小 Java文件上传实例并解决跨域问题 目在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传功能的实现. 了解MultipartFile接口 我们实现文件的上传用到了Spring-

  • Netty 轻松实现文件上传功能

    今天我们来完成一个使用netty进行文件传输的任务.在实际项目中,文件传输通常采用FTP或者HTTP附件的方式.事实上通过TCP Socket+File的方式进行文件传输也有一定的应用场景,尽管不是主流,但是掌握这种文件传输方式还是比较重要的,特别是针对两个跨主机的JVM进程之间进行持久化数据的相互交换. 而使用netty来进行文件传输也是利用netty天然的优势:零拷贝功能.很多同学都听说过netty的"零拷贝"功能,但是具体体现在哪里又不知道,下面我们就简要介绍下: Netty的&

  • Java跨域问题的处理详解

    前言 相信大家在写前端脚本的时候经常会遇到发送数据到后台的情况,但是由于浏览器的限制,不同域名之间的数据是不能互相访问的,那前端怎么和后端如何进行数据之间的交换呢? JavaScript由于安全性方面的考虑,不允许页面跨域调用其他页面的对象,那么问题来了,什么是跨域问题? 答:这是由于浏览器同源策略的限制,现在所有支持JavaScript的浏览器都使用了这个策略.那么什么是同源呢?所谓的同源是指三个方面"相同": 域名相同 协议相同 端口相同 下面就举几个例子来帮助更好的理解同源策略.

  • springMVC实现文件上传和下载

    本文实例为大家分享了springMVC实现文件上传和下载的具体代码,供大家参考,具体内容如下 1准备工作 web.xml文件导入DispatcherServlet,CharacterEncodingFilter <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet

  • 关于Java跨域Json字符转类对象的方法示例

    前言 JSON是JavaScript Object Notation的缩写,是一种轻量级的数据交换形式,是一种XML的替代方案,而且比XML更小,更快而且更易于解析.因为JSON描述对象的时候使用的是JavaScript语法,它是语言和平台独立的,并且这些年许多JSON的解析器和类库被开发出来. JSON具有以下这些形式: 对象是一个无序的"'名称/值'对"集合.一个对象以"{"(左括号)开始,"}"(右括号)结束.每个"名称"

  • FasfDFS整合Java实现文件上传下载功能实例详解

    在上篇文章给大家介绍了FastDFS安装和配置整合Nginx-1.13.3的方法,大家可以点击查看下. 今天使用Java代码实现文件的上传和下载.对此作者提供了Java API支持,下载fastdfs-client-java将源码添加到项目中.或者在Maven项目pom.xml文件中添加依赖 <dependency> <groupId>org.csource</groupId> <artifactId>fastdfs-client-java</arti

  • java实现文件上传下载功能

    本文实例为大家分享了java实现文件上传下载的具体代码,供大家参考,具体内容如下 1.上传单个文件 Controller控制层 import java.io.File; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapp

  • 基于Java文件输入输出流实现文件上传下载功能

    本文为大家分享了Java实现文件上传下载功能的具体代码,供大家参考,具体内容如下 前端通过form表单的enctype属性,将数据传递方式修改为二进制"流"的形式,服务端(servlet)通过  getInputStream() 获取流信息, 运用java I/O 流的基础操作将流写入到一个服务端临时创建的文件temp中,然后再次利用文件基本操作,读取并截取临时文件内容,根据其中信息创建相应的文件,将读取出来的具体信息写入,下载时,根据提交的文件名称,找到服务器端相应的文件,然后根据输

  • java中struts2实现文件上传下载功能实例解析

    本文实例讲述了java中struts2实现文件上传下载功能实现方法.分享给大家供大家参考.具体分析如下: 1.文件上传 首先是jsp页面的代码 在jsp页面中定义一个上传标签 复制代码 代码如下: <tr>      <td align="right" bgcolor="#F5F8F9"><b>附件:</b></td>      <td bgcolor="#FFFFFF">

  • Java实现文件上传下载以及查看功能

    目录 项目的目录结构 代码 IOUtils.java DownServlet.java UploadHandleServlet.java web.xml upload.jsp down.jsp 运行效果图 项目的目录结构 代码 IOUtils.java package cn.edu.zyt.util; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class

  • Java使用NIO优化IO实现文件上传下载功能

    目录 1 NIO的一些基础预备知识 2 NIO为何较传统的io速度较快 3 NIO实战上传下载 3.1 url下载文件 3.2 通过NIO上传文件 1 NIO的一些基础预备知识 Java中IO流类的体系中BIO与NIO:https://blog.csdn.net/ZGL_cyy/article/details/104326458Java IO体系与NIO和BIO体系面试题 :https://blog.csdn.net/ZGL_cyy/article/details/122836368为什么使用N

  • Spring Boot + thymeleaf 实现文件上传下载功能

    最近同事问我有没有有关于技术的电子书,我打开电脑上的小书库,但是邮件发给他太大了,公司又禁止用文件夹共享,于是花半天时间写了个小的文件上传程序,部署在自己的Linux机器上. 提供功能: 1 .文件上传 2.文件列表展示以及下载 原有的上传那块很丑,写了点js代码优化了下,最后界面显示如下图: 先给出成果,下面就一步步演示怎么实现. 1.新建项目 首先当然是新建一个spring-boot工程,你可以选择在网站初始化一个项目或者使用IDE的Spring Initialier功能,都可以新建一个项目

  • SpringMVC实现文件上传下载功能

    目录 导入需要的依赖包 一.单个文件上传 二.多个文件上传 三.上传文件列表显示 四.文件下载 今天遇到文件上传的问题,使用Ajax方式进行提交,服务器一直报错The current request is not a multipart request,看了网上很多方法,最后才找到,我在表单提交的时候使用了序列化$('#postForm').serialize(),但是这种方式,只能传递一般的参数,上传文件的文件流是无法被序列化并传递的.所以一直在报错.后来就直接使用submint(),放弃使用

  • SpringBoot实现文件上传下载功能小结

    最近做的一个项目涉及到文件上传与下载.前端上传采用百度webUploader插件.有关该插件的使用方法还在研究中,日后整理再记录.本文主要介绍SpringBoot后台对文件上传与下载的处理. 单文件上传 // 单文件上传 @RequestMapping(value = "/upload") @ResponseBody public String upload(@RequestParam("file") MultipartFile file) { try { if (

  • Struts2 控制文件上传下载功能实例代码

    之前介绍servlet3.0新特性的时候有提到过servlet API提供了一个part类来实现对文件的上传和保存,Struts其实是在其基础上做了进一步的封装,更加简单易用.至于文件下载,Struts贯彻AOP 思想,在下载之前提供对用户权限控制的API. 下面我们将详细介绍上传和下载的相关内容. 一.Struts文件上传机制 想要实现文件上传功能,页面的表单的method属性必须被指定为post,还有enctype属性必须为multipart/form-data,该值表示上传的内容将会以二进

随机推荐