一、上传文件

  1、使用 transferTo 上传

@ResponseBody
@RequestMapping(value = "/file/upload")
public ResultModel upload(@RequestParam MultipartFile file, HttpServletRequest request) {
ResultModel resultModel = new ResultModel();
String fileName = file.getOriginalFilename();
String newFileName = IdUtil.uuid() + "_" + fileName;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String dateFolder = sdf.format(new Date()); //文件后缀名
String fileNameLower = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."),file.getOriginalFilename().length()).toLowerCase();//toLowerCase();//小写文件名
String staticFileType = ".jpg,.png,.txt,.doc,.zip,.mp4";//允许上传的类型格式
String uploadPath = "/usr/data/upload"; //服务器上传路径 if(staticFileType.indexOf(fileNameLower) != -1){
long len = file.getSize(); //上传文件大小
if(len <= 20971520) {
if (file.isEmpty()) {
return resultModel;
}
//上传文件 服务器路径 + 当前日期 例如:201900808
String fileUploadPath = uploadPath + "/"+dateFolder + "/";
File f = new File(fileUploadPath);
if(!f.exists()){
f.mkdirs();
}
String filePath = fileUploadPath + newFileName;
File targetFile = new File(filePath);
try {
//将上传的文件写到服务器上指定的文件。
file.transferTo(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
//保存文件路径到数据库中
fileAttachService.insert(filePath, fileName);
}else{
resultModel.setStatus(500);
resultModel.setStatuMsg("文件大小不能超过20M!"); //文件大小不能超过20M
return resultModel;
}
}else{
resultModel.setStatus(500);
resultModel.setStatuMsg("文件后缀名不符合规范!"); //文件后缀名不符合规范
return resultModel;
}
return resultModel;
}

  2.使用 org.springframework.util.FileCopyUtils.copy()

import org.springframework.util.FileCopyUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; public class UploadFilesController {
@ResponseBody
@RequestMapping(value = "/file/upload")
public ResultModel upload(@RequestParam MultipartFile file, HttpServletRequest request) {
ResultModel resultModel = new ResultModel();
String fileName = file.getOriginalFilename();
String newFileName = IdUtil.uuid() + "_" + fileName;
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String dateFolder = sdf.format(new Date()); //文件后缀名
String fileNameLower = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."),file.getOriginalFilename().length()).toLowerCase();//toLowerCase();//小写文件名
String staticFileType = ".jpg,.png,.txt,.doc,.zip,.mp4";//允许上传的类型格式
String uploadPath = "/usr/data/upload"; //服务器上传路径 if(staticFileType.indexOf(fileNameLower) != -1){
long len = file.getSize(); //上传文件大小
if(len <= 20971520) {
if (file.isEmpty()) {
return resultModel;
}
//上传文件 服务器路径 + 当前日期 例如:201900808
String filePath = uploadPath + "/"+dateFolder + "/" ; File saveFile = new File(filePath,newFileName);
try {
if(!saveFile.exists()){
saveFile.createNewFile();
}
FileCopyUtils.copy(file.getInputStream(), new FileOutputStream(saveFile));
}
catch (IOException e) {
e.printStackTrace();
}
//保存文件路径到数据库中
fileAttachService.insert(filePath, fileName);
}else{
resultModel.setStatus(500);
resultModel.setStatuMsg("文件大小不能超过20M!"); //文件大小不能超过20M
return resultModel;
}
}else{
resultModel.setStatus(500);
resultModel.setStatuMsg("文件后缀名不符合规范!"); //文件后缀名不符合规范
return resultModel;
}
return resultModel;
}
}

二、下载文件

import org.apache.commons.io.IOUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.io.*;
public class UploadFilesController { @RequestMapping(value = "/file/download/{fileId}")
public void download(@PathVariable("fileId") String fileId, HttpServletRequest request, HttpServletResponse response) {
FileAttach fileAttach = fileAttachService.selectById(fileId);
File file = new File(fileAttach.getFilePath()); InputStream in = null;
OutputStream os = null;
try {
//String fileName = URLEncoder.encode(fileAttach.getFileName(), "UTF-8").replaceAll("\\+", "%20");
String fileName = new String(fileAttach.getFileName().getBytes("gb2312"), "ISO8859-1");//解决中文名乱码
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;fileName=" + fileName);
response.setHeader("Content-Length", ""file.length());//展示下载进度
in = new FileInputStream(file);
os = response.getOutputStream();
IOUtils.copyLarge(in, os);
}
catch (Exception e) {
e.printStackTrace();
}
finally {
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(os);
}
}
}

  

JAVA 文件的上传下载的更多相关文章

  1. java文件夹上传下载控件分享

    用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个需要在JAVA.MyEclipse环境下大文件上传的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助. 以下 ...

  2. java文件断点续传上传下载解决方案

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

  3. java文件夹上传下载组件

    核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...

  4. JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)

    package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...

  5. Spring实现文件的上传下载

    背景:之前一直做的是数据库的增删改查工作,对于文件的上传下载比较排斥,今天研究了下具体的实现,发现其实是很简单.此处不仅要实现单文件的上传,还要实现多文件的上传. 单文件的下载知道了,多文件的下载呢? ...

  6. SocketIo+SpringMvc实现文件的上传下载

    SocketIo+SpringMvc实现文件的上传下载 socketIo不仅可以用来做聊天工具,也可以实现局域网(当然你如果有外网也可用外网)内实现文件的上传和下载,下面是代码的效果演示: GIT地址 ...

  7. JAVAWEB之文件的上传下载

    文件上传下载 文件上传: 本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将 ...

  8. SSM框架之中如何进行文件的上传下载

    SSM框架的整合请看我之前的博客:http://www.cnblogs.com/1314wamm/p/6834266.html 现在我们先看如何编写文件的上传下载:你先看你的pom.xml中是否有文件 ...

  9. 使用Fileupload完成文件的上传下载

    目录 使用Fileupload完成文件的上传下载 为什么需要进行文件上传下载? 引入jar包 文件上传 注意事项 编写一个简单的文件上传jsp页面 编写Servlet Student类用于封装数据,后 ...

随机推荐

  1. 【学术篇】CF935E Fafa and Ancient Mathematics 树形dp

    前言 这是一道cf的比赛题.. 比赛的时候C题因为自己加了一个很显然不对的特判WA了7次但找不出原因就弃疗了... 然后就想划水, 但是只做了AB又不太好... 估计rating会掉惨 (然而事实证明 ...

  2. shell实现批量创建交叉编译工具软链接

    在学习嵌入式过程中,常常用到交叉编译工具,而原本的交叉工具链比较长,不利于记忆以及使用, 解压后的交叉编译工具链如下图所示 为了更好的使用交叉编译工具与其他开发者保持一致,经常需要用到软链接. NAM ...

  3. 5. java运算符

    1.算术运算符 注意: % 取余数 (1)自增 (++)前自增:先自增完毕,再运算整个表达式,语句分号前面的都是运算表达式: 后自增,先运算完整个表达式(分号前面的都是表达式),再进行自增: 2.赋值 ...

  4. leetcood学习笔记-111-二叉树的最小深度

    题目描述: 第一次提交: class Solution(object): def minDepth(self, root): """ :type root: TreeNo ...

  5. Servlet - HTTP协议相关

    1. 术语 : 请求 : 客户端根据用户所给的地址信息将数据发送给服务器的过程 响应 : 服务器将请求的处理结果发送给浏览器的过程 2. HTTP协议 : 超文本传输协议 ( Hyper Text T ...

  6. js基础用法 ,基础语法

    js用法: HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 <body> 和 <head& ...

  7. JavaWeb学习篇之----EL表达式详解

    我们之前的几篇文章中都提到了一个EL表达式,那么这个EL表达式到底是什么东东呢?为什么用处那么大,下面我们就来看看EL表达式的相关内容 EL表达式简介: EL 全名为Expression Langua ...

  8. 累乘函数线性逆元打表,阶乘反演——bzoj4816

    学了一种新套路,倒序打表函数的逆元可以直接线性完成 #include<bits/stdc++.h> using namespace std; #define ll long long #d ...

  9. Delphi提取EXE,DLL文件图标

    //uses ShellAPIprocedure TForm1.Button1Click(Sender: TObject);var IconIndex:Word; h:hICON;begin Icon ...

  10. delphi directui 做界面的一个例子

    现在很多CS系统或者软件界面都做的非常好看,比如:QQ皮肤,迅雷下载,360杀毒界面等.这些都是运用的流行的DIRECTUI 技术,基本上有的资料都是基于C++的,很少有同仁将C++下的DIRECT ...