java文件上传下载代码实例
作者:弓长张&木子李 发布时间:2023-11-10 05:06:14
标签:java,上传,下载
本文实例为大家分享了java文件上传下载的具体代码,供大家参考,具体内容如下
文件上传
@RequestMapping(value="/uploadFile",method=RequestMethod.POST)
public ResultObject uploadFiles(@RequestParam("file")MultipartFile file,HttpServletRequest request){
ResultObject rs = null;//返回上传完成信息
String uploadDir = "files";//上传目录,文件保存在webapp下的files文件中
if(!file.isEmpty()) {
//可以对user做一些操作如存入数据库
//以下的代码是将文件file重新命名并存入Tomcat的webapp目录下项目的下级目录
String fileRealName = file.getOriginalFilename(); //获得原始文件名;
/*int pointIndex = fileRealName.indexOf("."); //点号的位置
String fileSuffix = fileRealName.substring(pointIndex); //截取文件后缀
UUID FileId = UUID.randomUUID(); //生成文件的前缀包含连字符
String savedFileName = FileId.toString().replace("-", "").concat(fileSuffix); //文件存取名
*/
String savedDir = request.getSession().getServletContext().getRealPath(uploadDir); //获取服务器指定文件存取路径
File savedFile = new File(savedDir, fileRealName);
boolean isCreateSuccess;
try {
isCreateSuccess = savedFile.createNewFile();
if (isCreateSuccess) {
file.transferTo(savedFile); //转存文件
rs = ResultObject.getSuccessResult("上传文件成功");
Long size = file.getSize();//获取文件大小
rs.setData(uploadDir+fileRealName);
}else{
rs = ResultObject.getFailResult("请修改文件名,重新上传");
}
} catch (IOException e) {
e.printStackTrace();
}
}else{
rs = ResultObject.getFailResult("文件不能为空");
}
return rs;
}
文件下载
@RequestMapping(value = "/filterPermission/appDownLoad", method = RequestMethod.GET)
public void appDownLoad(HttpServletRequest request, HttpServletResponse response) {
//url是上面文件上传的url
download(url,request,response);
}
public String download(String filePath, HttpServletRequest request, HttpServletResponse response) {
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
//获取文件名
String fileName = filePath.substring(filePath.lastIndexOf("/")+1);
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
//response.setContentType("application/force-download");
//处理下载弹出框名字的编码问题
response.setHeader("Content-Disposition", "attachment;fileName="
+ new String( fileName.getBytes("gb2312"), "ISO8859-1" ));
//获取文件的下载路径
String path = request.getSession().getServletContext().getRealPath(filePath);
//利用输入输出流对文件进行下载
InputStream inputStream = new FileInputStream(new File(path));
//设置文件大小
response.setHeader("Content-Length", String.valueOf(inputStream.available()));
bis = new BufferedInputStream(inputStream);//构造读取流
bos = new BufferedOutputStream(response.getOutputStream());//构造输出流
byte[] buff = new byte[1024];
int bytesRead;
//每次读取缓存大小的流,写到输出流
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
response.flushBuffer();//将所有的读取的流返回给客户端
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally{
try{
if(null != bis){
bis.close();
}
if(null != bos){
bos.close();
}
}catch(IOException e){
System.out.println("下载文件失败,"+"文件路径:"+filePath+e);
logger.error("文件下载失败!", e);
}
}
// 返回值要注意,要不然就出现下面这句错误!
//java+getOutputStream() has already been called for this response
return null;
}
以上所述是小编给大家介绍的java文件上传下载详解整合,希望对大家有所帮助。
来源:https://www.cnblogs.com/gczmn/p/9921479.html
0
投稿
猜你喜欢
- 前言我们在 页面切换转场动画,英雄救场更有趣!介绍了 Hero 动画效果,使用 Hero 用于转场能够提供非常不错的体验。既然称之
- 近日于LeetCode看题遇1114 按序打印,获悉一解法使用了Semaphore,顺势研究,记心得于此。此解视Semaphore为锁,以保
- 通过本篇文章主要给大家讲解了在JAVA开发中Servlet3.0异步处理遇到的问题以及处理办法,以下是具体内容:Servlet 3.0 开始
- 前言使用SpringBoot来开发项目相对于传统模式,要快速优雅许多,相信目前国内绝大部分web项目的开发还没有使用SpringBoot来做
- Java在控制台打印本月日历在学习《Java核心技术卷I·基础知识》第10版 的时候里面有一个小例子,就是在控制台上打印日历的一个例子,就想
- Java基于对象流实现银行系统的具体代码,供大家参考,具体内容如下系统特点:数据持久化到文件中,系统启动后,加载文件中数据到集合中,相当于做
- 策略模式的应用场景策略模式是否要使用,取决于业务场景是否符合,有没有必要。是否符合如果业务是处于不同的场景时,采取不同的处理方式的话,就满足
- SimpleDateFormat进行日期格式化1.为啥要用SimpleDateFormat众所周知,Java中的日期类是Date,然后日期默
- goto在Java中是一个保留字,但在语言中并没有用到它;Java没有goto。但是,Java也能完成一些类似于跳转的操作,主要是依靠:标签
- SpringBoot 2.1.4 错误处理机制springboot的自动配置中帮我们配置了相关的错误处理组件,例如访问一个不存在的页面,就会
- Mybatis-Plus是一个优秀的Mybatis增强工具,目前更新到3.1.1。Mybatis-Plus原生提供了很多单表操作的方法,极大
- 最近在看《.NET游戏编程入门经典 C#篇》 第一章介绍了如何制作俄罗斯方块,自己试了试按照书上的步骤,可算是完成了。于是写下这篇文章留作纪
- 一、常量用final修饰(也称最终变量)常量在声明时必须赋初值,赋值后不能再修改值常量名通常用全大写字母表示声明时需要添加final或sta
- 匿名类类型类可以是匿名的 - 也就是说,可以在没有 identifier 的情况下声明类。在将类名称替换为 typedef 名称时,这会很有
- 本文实例讲解了iOS从背景图中取色的代码,分享给大家供大家参考,具体内容如下实现代码:void *bitmapData; //内存空间的指针
- @ConfigurationProperties加载外部配置@ConfigurationProperties可以将外部配置文件(比如appl
- 我们在学习接口的时候。能够在里面做一些方法的调用。不过今天所要讲的JDBC,虽然也是连接数据库的一种接口,不过与类接口有着很大的区别,大家要
- Java 2D API通过扩展抽象窗口工具箱(AWT),为Java程序提供了二维图像,文本和图形的功能。这个复杂的渲染包支持线形图像,文本和
- 建造者模式针对的是复杂对象的构建,比如一个产品有多个部分构成,每个部分都可以单独进行生产,这时候就可以用建造者模式,由Builder构造产品
- 1. strlen —— 求字符串长度1.1 strlen 的声明与用处strlen ,我们有一些英