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
投稿
猜你喜欢
- 使用 WebView 时,我们通常会重写以下方法:shouldOverrideUrlLoading() onPageStarted()onP
- 这里我们只介绍springboot2.0的session时间设置Duration转换字符串方式,默认为正,负以-开头,紧接着P,(字母不区分
- 本文实例为大家分享了C#获取计算机信息的具体代码,供大家参考,具体内容如下using System;using System.Configu
- 现在很多电脑提供了蓝牙支持,很多笔记本网卡也集成了蓝牙功能,也可以采用USB蓝牙方便的连接手机等蓝牙设备进行通信。操作蓝牙要使用类库InTh
- SpringBoot版本2.2.4.RELEASE。【1】SpringBoot接收到请求① springboot接收到一个请求返回json格
- 在一个项目中使用到一个问卷调查,在用户完成之后,需要统计所有题目中哪一个选项被选中次数最多。我的实现方法是将所有题目选中的选项拼接为一个字符
- 本文实例讲述了C#保存listbox中数据到文本文件的方法。分享给大家供大家参考。具体实现方法如下:private void SaveLst
- 文件的上传与下载(一)在实现文件上传和下载之前我们需要做一些准备工作,在Apache官网去下载文件上传下载的两个组件,下载链接这里给出:co
- 发现问题在一个数据列表中我用了Linq GroupBy 和OrderBy。 排序在本机正常使用,发到测试后排序死活不对,总以为是程序问题。于
- 本文实例为大家分享了shader实现基于世界坐标的贴图置换效果。效果如下:设置面板如下:可在面板上设置切换方向,与切换对象,及其切换速度。s
- 前言基本语法首先我们要知道java的基础语法。1.由26个英文字母大小写,0-9,_或$组成2.数字不可以开头3.不可以使用关键字和保留字,
- 本文实例讲述了C#通过DataSet读写xml文件的方法。分享给大家供大家参考。具体实现方法如下:DataSet ds = new Data
- 先来看一个很简单的核心图片缩放方法:public static Bitmap scale(Bitmap bitmap, float scal
- 知识点:1.使用SQL Helper创建数据库2.数据的增删查改(PRDU:Put、Read、Delete、Update)背景知识:上篇文章
- 前言当线程池的线程阻塞时,线程池会创建额外的线程,而创建、销毁和调度线程所需要相当昂贵的内存资源,另外,很多的开发人员看见自己程序的线程没有
- 完成支付宝支付、查询的接口之后,我们应该还需要定时与支付宝进行对账,以确保商户系统的订单信息是正确的,想知道支付宝支付、查询接口实现过程的亲
- finalize方法是什么finalize方法是Object的protected方法,Object的子类们可以覆盖该方法以实现资源清理工作,
- a.在.xaml文件中拖入一个datagrid,然后添加列名,使用Binding="{Binding 数据库中的列名称}"
- 背景在我们android开发中,如果需要actiivty/fragment等有状态的控件保存当前状态,由系统进行数据保存的恢复的时候比如正常
- MyBatis-Plus 使用简单,内置通用 Mapper、通用 Service,仅仅通过少量配置,即可实现单表大部分 CRUD 操作。下面