Java实现文件的上传下载(含源代码和jar包)
1.需要使用的jar包

链接:https://pan.baidu.com/s/1IaxQRSwfzxDpe4w4JiaEKw
提取码:xwtz
2.如果想实现文件的下载,需要创建一张表,表的结构为
id url(id为查找依据,url为文件名即可)
2.文件的上传
该方法我是建立在SpringBoot框架中实现的,实际上这并不是必要的。
主要的是参数file是上传的文件信息,即路径相关。path的路径为获取的,使用与linux与windows系统,如果服务器固定,可以将path路径写成绝对路径。
上传之后需要将文件名存进数据库中,并且对应唯一的id方便下载使用。
后台
@RequestMapping("upload")
public String testupload(@RequestParam("uploadfile") MultipartFile file,HttpServletRequest request) throws IllegalStateException, IOException{
System.out.println("上传");
if(!file.isEmpty()) {//上传文件路径
String path = request.getSession().getServletContext().getRealPath(File.separator+"WEB-INF"+File.separator+"testupload");
//path="H:"+File.separator+"Demo"; 如果写绝对路径可用这个path覆盖上边
//上传文件名
String filename = file.getOriginalFilename();
File filepath = new File(path,filename);
//判断路径是否存在,如果不存在就创建一个
if (!filepath.getParentFile().exists()) {
filepath.getParentFile().mkdirs();
}
//将上传文件保存到一个目标文件当中
file.transferTo(new File(path + File.separator + filename));
userService.insertFileByFileName(filename); //将文件的名字存入数据库
//输出文件上传最终的路径 测试查看
return String.valueOf(file.getSize());
} else {
return "0";
}
}
前台
<form id="fileform" method="post" enctype="multipart/form-data">
<input type="file" id="fileupload" name="uploadfile"/>
<button id="upload_btn">上传文件</button>
</form> $("#upload_btn").click(function(){
var form = new FormData(document.getElementById("fileform"));
$.ajax({
type:"post",
url:"/user/upload",
data:form,
processData:false,
contentType:false,
dataType:'text',
success:function(data){
alert(data);
}
});
});
3.文件的下载(注)
ids为传入的参数,为数据库中对应文件名的id,根据id查找到文件名,
path为上传的文件路径,然后将路径与文件名拼接输出路径即为下载路径。
注:下载的请求不能使用ajax,具体原因不清楚,我使用ajax多次尝试失败,改用a标签直接请求然后成功。
后台
@RequestMapping(value = "downloadfile",produces = "application/json;charset=utf-8")
public void downloadlm(HttpServletRequest request,HttpServletResponse response,String ids,Model model) throws IOException {
int id=Integer.parseInt(ids);
System.out.println("进入下载文件");
Myfile myFile = userService.selectFileById(id); String path = request.getSession().getServletContext().getRealPath(File.separator+"WEB-INF"+File.separator+"testupload");
path="H:"+File.separator+"Demo";
String filename=myFile.getUrl().substring(myFile.getUrl().lastIndexOf("\\")+1);
System.out.println(filename+"=======================================");
File file = new File(path+File.separator+filename);
System.out.println(file.getPath());
//设置响应的头信息,解决文件名为中文乱码的问题
response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(file.getName(), "utf-8"));
//使用文件输入流读取下载文件信息
FileInputStream in = new FileInputStream(file);
//得到响应流中的输出流
OutputStream out = response.getOutputStream();
//建立一个缓存区
byte[] buffer = new byte[1024]; int len = 0;
//把输入流中的数据通过循环写入到响应流中
while((len = in.read(buffer)) > 0) {
out.write(buffer,0,len);
} in.close();
out.close(); }
前台:
<a id="down_file_btn" href="/user/downloadfile?ids=1">下载</a>
Java实现文件的上传下载(含源代码和jar包)的更多相关文章
- Java实现文件的上传下载
文件上传,下载的方法: 上传代码 /** * 文件上传.保存 * * @param mapping * @param form * @param request * @param response * ...
- java实现文件的上传和下载
1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...
- java客户端文件的上传和下载
java客户端文件的上传和下载 //上传 public JTable upload(String id){ JTable table=new JTable(); System.out.println( ...
- JAVA中使用FTPClient上传下载
Java中使用FTPClient上传下载 在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在c ...
- Spring实现文件的上传下载
背景:之前一直做的是数据库的增删改查工作,对于文件的上传下载比较排斥,今天研究了下具体的实现,发现其实是很简单.此处不仅要实现单文件的上传,还要实现多文件的上传. 单文件的下载知道了,多文件的下载呢? ...
- SocketIo+SpringMvc实现文件的上传下载
SocketIo+SpringMvc实现文件的上传下载 socketIo不仅可以用来做聊天工具,也可以实现局域网(当然你如果有外网也可用外网)内实现文件的上传和下载,下面是代码的效果演示: GIT地址 ...
- JAVAWEB之文件的上传下载
文件上传下载 文件上传: 本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将 ...
- SSM框架之中如何进行文件的上传下载
SSM框架的整合请看我之前的博客:http://www.cnblogs.com/1314wamm/p/6834266.html 现在我们先看如何编写文件的上传下载:你先看你的pom.xml中是否有文件 ...
- 使用Fileupload完成文件的上传下载
目录 使用Fileupload完成文件的上传下载 为什么需要进行文件上传下载? 引入jar包 文件上传 注意事项 编写一个简单的文件上传jsp页面 编写Servlet Student类用于封装数据,后 ...
随机推荐
- 2017 ICPC西安区域赛 A - XOR (线段树并线性基)
链接:https://nanti.jisuanke.com/t/A1607 题面: Consider an array AA with n elements . Each of its eleme ...
- 《Data Structures and Algorithm Analysis in C》学习与刷题笔记
<Data Structures and Algorithm Analysis in C>学习与刷题笔记 为什么要学习DSAAC? 某个月黑风高的夜晚,下班的我走在黯淡无光.冷清无人的冲之 ...
- 使用pycharm开发web——django2.1.5(一)入坑尝试第一步,基本搭建
首先,接触python的人应该都会用pip 来安装需要的包吧(------>>>>)默认 在运行中使用python -m django --version来检查自己的djang ...
- (四)循环队列 VS 数组队列 (效率对比)
目录 背景 测试代码 结果 链表 随机访问 背景 各自完成插入 10万.20万 条随机数,然后再将这些随机数出队列 : 测试代码 /** * 测试速度 */ public String testSpe ...
- (十七)使用JDBC进行批处理
目录 业务场景: 第一种方式 第二种方式 批处理中的 update() 方法 注意事项 备注: 业务场景: 当需要向数据库中发送一批SQL语句执行时,应避免向数据库一条条的发送执行,而应采用JDBC的 ...
- Ubuntu18.04中安装Python3.7教程
Ubuntu18.04中安装Python3.7教程 链接https://blog.csdn.net/weixin_42056625/article/details/82970358
- codeforces 1244E Minimizing Difference (贪心)
(点击此处查看原题) 题意分析 给出n个数,a1,a2...an,现在可以进行最多k次操作,每次操纵可以使得任意一个数自增或者自减,问经过最多k次操作后,n个数中的最大值-最小值最小为多少? 解题思路 ...
- python — 池
1. 池 池分为:进程池.线程池 池:预先的开启固定个数的进程数/线程数,当任务来临的时候,直接提交给已经开好的进程 / 线程,让这个进程 / 线程去执行就可以了. 池节省了进程.线程的开启.关闭.切 ...
- Python内存相关
Python内存相关 示例一: v1 = [1, 2, 3] v2 = [1, 2 ,3] v1 = 123 v2 = 123 v1 = "dogfa" v2 = "do ...
- 图解Java继承内存分配
图解Java继承内存分配 继承的基本概念: (1)Java不支持多继承,也就是说子类至多只能有一个父类. (2)子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法. (3)子 ...