java web上传文件和下载文件代码片段分享
作者:夏诗鸢 发布时间:2023-10-04 19:50:50
标签:java,web,上传文件,下载文件
本文实例为大家分享了java web上传文件和下载文件的具体代码,供大家参考,具体内容如下
/**
* Purpose:上传文档
*
* @param req
* @param fileTitle
* @param fileType
* @param fileDesc
* @return
*/
@RequestMapping("upload")
public ModelAndView upload(HttpServletRequest req, String fileType, String fileDesc, String share) {
UserAllInfo userAll = (UserAllInfo) req.getSession().getAttribute("userAll");
ModelAndView mav = new ModelAndView();
// 获取文件的大小
String fileSize = "";
int length = req.getContentLength();
//转换成KB
double len1 = (double) (Math.round((length / 1024) * 100)) / 100;
//转换成MB
double len2 = (double) (Math.round((len1 / 1024) * 100)) / 100;
if (len2 > 1) {
fileSize = String.valueOf(len2) + "MB";
} else {
fileSize = String.valueOf(len1) + "KB";
}
//将请求转换成处理文件的请求
MultipartRequest mreq = (MultipartRequest) req;
//文件上传专用类
MultipartFile mfile = mreq.getFile("uploadFile");
// 得到上下文路径
String root = req.getSession().getServletContext().getRealPath("/");
File dir = new File(root);
// 获取文件名和文件的mime类型
String str = mfile.getOriginalFilename();
String[] st = str.split("\\.");
File savedFile = null;
try {
//在指定目录中创建一个新的空文件,文件名称加前缀"upload_"
savedFile = File.createTempFile("upload_", mfile.getOriginalFilename(), dir);
//将缓冲区的内容复制到新创建的文件中
FileCopyUtils.copy(mfile.getInputStream(), new FileOutputStream(savedFile));
} catch (Exception e) {
e.printStackTrace();
}
String path = savedFile.getPath();
// 将文件的信息封装在对象中
FileInfo file = new FileInfo();
if (userAll != null) {
file.setUploadPersonId(userAll.getUser().getUserId());
} else {
mav.setViewName("login");
return mav;
}
file.setFileName(st[0]);
file.setFilePath(path);
Date date = new Date();
file.setUploadDate(date);
file.setFileSize(fileSize);
file.setFileType(fileType);
file.setFileForm(st[1]);
if ("superman".equals(userAll.getUser().getUserNumber())) {
file.setFileShare("Y");
file.setCheckFlag("Y");
} else {
file.setFileShare(share);
file.setCheckFlag("N");
}
file.setDeleteFlag("N");
file.setDownloadTimes(0);
// 保存文件的信息
boolean bool = fileSer.saveFile(file);
String userNumber = userAll.getUser().getUserNumber();
//设置跳转界面
mav.setViewName("jsp/person/upload");
logSer.saveLog("用户\"" + userNumber + "\"上传文件\"" + file.getFileName() + "\"");
mav.getModel().put("bool", bool);
return mav;
}
/**
* Purpose:下载文档
*
* @param fileId 文件id
* @return
*/
@RequestMapping("download")
public void download(Integer fileId, HttpServletResponse resp) {
FileInfo file = new FileInfo();
//通过文件id获取文件的基本信息
file = fileSer.getFileById(fileId);
// 根据文件后缀名设置文件的mime类型
String mime = "application/";
switch (file.getFileForm()) {
case "doc":
mime = mime + "msword";
break;
case "docx":
mime = mime + "msword";
break;
case "pdf":
mime = mime + "pdf";
break;
case "xls":
mime = mime + "vnd.ms-excel";
case "ppt":
mime = mime + "vnd.ms-powerpoint";
break;
case "txt":
mime = "text/plain";
break;
default:
break;
}
resp.setContentType(mime);
String fileName = file.getFileName();
String name = "";
try {
// 将文件名使用utf-8编码格式编码,使其中的中文字符可以正常显示
name = URLEncoder.encode(fileName, "utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
// 弹框选择保存路径
resp.setHeader("content-disposition", "attachment;filename=" + name + "." + file.getFileForm()
+ ";filename*=utf-8''" + name + "." + file.getFileForm());
String filePath = file.getFilePath();
InputStream is = null;
OutputStream os = null;
try {
is = new BufferedInputStream(new FileInputStream(filePath));
os = new BufferedOutputStream(resp.getOutputStream());
byte[] buff = new byte[1024];
@SuppressWarnings("unused")
int count;
while ((count = is.read(buff)) != -1) {
os.write(buff);
}
//修改下载次数
fileSer.update(fileId);
} catch (Exception e) {
e.printStackTrace();
} finally {
//最后,要记得关闭输入流和输出流
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (os != null) {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}


猜你喜欢
- Intellij IDEA 配置Subversion插件实现步骤详解在使用Intellij的过程中,突然发现svn不起效了,在VCS–》Ch
- 前期准备首先要先明确有个大体的思路,要实现什么样的功能,了解完成整个模块要运用到哪些方面的知识,以及从做的过程中去发现自己的不足。技术方面的
- 一、单线程扫描1.代码using System;using System.Windows.Forms;using System.Net;us
- 几个月前写过一篇博客《xUtils3.0框架学习笔记》 ,上面也有记录通过xUtils实现文件上传的使用方法,代码如下:private vo
- 这篇文章主要介绍了Java的优先队列PriorityQueue原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学
- 根据使用泛型位置的不同可以分为:声明侧泛型、使用侧泛型。声明侧的泛型信息被记录在Class文件的Constant pool中以Signatu
- 本文实例完成人机猜拳互动游戏的开发,供大家参考,具体内容如下阶段一:实验——分析业务,创建用户类1.分析业务,抽象出类、类的特征和行为2.创
- 60年代,在OS中能拥有资源和独立运行的基本单位是进程,然而随着计
- 了解JVM内存结构的目的在Java的开发过程中,因为有JVM自动内存管理机制,不再需要像在C、C++开发那样手动释放对象的内存空间,不容易出
- 在C#中通过使用方法来获取返回值时,通常只能得到一个返回值。因此,当一个方法需要返回多个值的时候,就需要用到ref和out,那么这两个方法区
- 本文实例为大家分享了Unity实现俄罗斯方块的具体代码,供大家参考,具体内容如下一、使用SpriteRenderer作为小方块图片,创建7种
- 通过本篇文章主要给大家讲解了在JAVA开发中Servlet3.0异步处理遇到的问题以及处理办法,以下是具体内容:Servlet 3.0 开始
- Windows的画图板相信很多人都用过,这次我们就来讲讲Java版本的简易画板的实现。基本的思路是这样的:画板实现大致分三部分:一是画板界面
- Flyway的使用环境:SpringBoot 2.0.4.RELEASE为什么要用Flyway?开发人员在合作的时候经常遇到以下场景:1.开
- 一、TestNG介绍TestNG是Java中的一个测试框架, 类似于JUnit 和NUnit, 功能都差不多, 只是功能更加强大,使用也更方
- 1. RSA加密与解密 -- 使用公钥加密、私钥解密public class RSATool { &nb
- 需求:键盘录入一个月份,输出该月份对应的季节。一年有四季3,4,5 春季6,7,8 夏季9,
- 五丶封装(1)包的概念与创建1>概念在我们的电脑上有许多的文件,我们为了方便管理,大致给它们进行了不同的命名。然后在不同的文件夹下面再
- 基于SMTP发送一个简单的邮件首先,需要一个认证器:package No001_基于SMTP的文本邮件;import javax.mail.
- 本文实例讲解的是如何画一个满满圆形水波纹loadingview,这类效果应用场景很多,比如内存占用百分比之类的,分享给大家供大家参考,具体内