博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java实现文件的上传下载(含源代码和jar包)
阅读量:5120 次
发布时间:2019-06-13

本文共 3276 字,大约阅读时间需要 10 分钟。

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"; } }

前台

$("#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>

转载于:https://www.cnblogs.com/wys-373/p/11455839.html

你可能感兴趣的文章
约瑟夫环问题
查看>>
c++ __int64
查看>>
IP封锁 (防火墙维护一张IP黑名单)
查看>>
【模板】trie树(字典树)
查看>>
Jmeter学习之旅(二)——Jmeter功能概要
查看>>
jquery源码笔记(五): jquery.extend() 扩展一些工具方法
查看>>
JSON.stringify 语法实例讲解
查看>>
Python6 模块
查看>>
P3377 【模板】左偏树(可并堆)
查看>>
Djang 用户登录
查看>>
Java同步锁——lock与synchronized 的区别【转】
查看>>
洛谷-校门外的树-数组
查看>>
Python--网络编程-----文件传输简单版本
查看>>
3 使用模块
查看>>
解决前端页面运行出现乱码的现象
查看>>
CF 208E. Blood Cousins [dsu on tree 倍增]
查看>>
趣谈面试(一)
查看>>
Quart2D setNeedsDisplay
查看>>
设计模式之策略设计模式
查看>>
SQL2005 安装时 “性能监视器计数器要求(错误)” 解决方案
查看>>