java文件上传下载代码实例
时间:2019-03-18
这篇文章主要介绍了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文件上传下载详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
- Golang中container/list包中的坑
- 关于Golang语言数组索引的有趣现象
- Golang不定参数
- Go并发编程基础(译)
- go-concurrent-programming.md
- Go语言并发模型:以并行处理MD5为例
- golang 使用json 包 实现序列化
- 【远古文章】用 Go 语言来看 Android! 出发, Android, 出发!
- Leaf 游戏服务器框架简介
- MongoDB 存储过程的使用以及性能调优方案
- [go语言]利用缓冲信道来实现网游帐号验证消息的分发和等待
- 【Golang语言社区--投稿专区】简单,好玩,有趣的命令行版12306(golang)
- 网游内存数据库的设计(1)
- 网游内存数据库的设计(2)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Go 使用标准库 net/rpc 包
- 强大的 Stream API(三)
- 微软发布代码智能新基准数据集CodeXGLUE,多角度衡量模型优劣
- 强大的 Stream API(二)
- 无限想象空间,用Python玩转3D人体姿态估计
- 300亿美元,AMD为什么要买Xilinx?
- Angular5.0.0新特性
- 用Python实现坦克大战游戏 | 干货贴
- android studio 3.0 升级 项目遇到的问题及更改思路(问题小结)
- Android Studio 3.0被调方法参数名提示的取消方法
- Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
- 解决python多线程报错:AttributeError: Can't pickle local object问题
- TensorFlow2.1.0最新版本安装详细教程
- Android仿京东首页秒杀倒计时
- 超实用的android自定义log日志输出工具类