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包)的更多相关文章

  1. Java实现文件的上传下载

    文件上传,下载的方法: 上传代码 /** * 文件上传.保存 * * @param mapping * @param form * @param request * @param response * ...

  2. java实现文件的上传和下载

    1. servlet 如何实现文件的上传和下载? 1.1上传文件 参考自:http://blog.csdn.net/hzc543806053/article/details/7524491 通过前台选 ...

  3. java客户端文件的上传和下载

    java客户端文件的上传和下载 //上传 public JTable upload(String id){ JTable table=new JTable(); System.out.println( ...

  4. JAVA中使用FTPClient上传下载

    Java中使用FTPClient上传下载 在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在c ...

  5. Spring实现文件的上传下载

    背景:之前一直做的是数据库的增删改查工作,对于文件的上传下载比较排斥,今天研究了下具体的实现,发现其实是很简单.此处不仅要实现单文件的上传,还要实现多文件的上传. 单文件的下载知道了,多文件的下载呢? ...

  6. SocketIo+SpringMvc实现文件的上传下载

    SocketIo+SpringMvc实现文件的上传下载 socketIo不仅可以用来做聊天工具,也可以实现局域网(当然你如果有外网也可用外网)内实现文件的上传和下载,下面是代码的效果演示: GIT地址 ...

  7. JAVAWEB之文件的上传下载

    文件上传下载 文件上传: 本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将 ...

  8. SSM框架之中如何进行文件的上传下载

    SSM框架的整合请看我之前的博客:http://www.cnblogs.com/1314wamm/p/6834266.html 现在我们先看如何编写文件的上传下载:你先看你的pom.xml中是否有文件 ...

  9. 使用Fileupload完成文件的上传下载

    目录 使用Fileupload完成文件的上传下载 为什么需要进行文件上传下载? 引入jar包 文件上传 注意事项 编写一个简单的文件上传jsp页面 编写Servlet Student类用于封装数据,后 ...

随机推荐

  1. Mysql性能优化之---(二)

    建立适当的索引 说起提高数据库性能,索引是最物美价廉的东西了.不用加内存,不用改程序,不用调sql,只要执行个正确的'create index',查询速度就可能提高百倍千倍,这可真有诱惑力.可是天下没 ...

  2. oracle中表记录被另一个用户锁住

    应用场景 在查询oracle表时,提示表记录被另一个用户锁住了 有可能是在使用了pl/sql工具后修改某个表记录时,加锁,或者发生故障异常退出,下次登录进去修改不了 查询锁 --查看数据库的锁的来源. ...

  3. ThreadLocal,Lock的事儿

    ThreadLocal作用 防止线程间的干扰 public interface Sequence { int getNumber(); } public class ClientThread exte ...

  4. 网络编程之异步IO

    Linux的I/O模型有下面几种:1. 同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止.2. 同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/ ...

  5. Pygame小游戏练习五

    @Python编程从入门到实践 Python项目练习 十一.显示游戏得分及最高分 创建新类Scoreboard,用以显示得分和最高分. # scoreboard.py import pygame.fo ...

  6. Django-djangorestframework-异常模块-源码及自定义异常

    目录 异常模块 为什么要自定义异常模块 常见的几种异常情况 异常模块源码分析 自定义 drf 异常处理 异常模块 为什么要自定义异常模块 所有经过 drf APIView 视图类产生的异常,都可以提供 ...

  7. AlertManager 部署及使用

    熟悉了 Grafana 的报警功能,但是 Grafana 的报警功能目前还比较弱,只支持 Graph 的图表的报警.今天来给大家介绍一个功能更加强大的报警工具:AlertManager. 简介 之前我 ...

  8. 常用javascript内置对象——String对象

    创建 String 对象的语法: 1:new String(s); :2:String(s); :3:直接赋值 String中属性 String中方法 <script> window.on ...

  9. Redission

    https://github.com/redisson/redisson/wiki/6.-%E5%88%86%E5%B8%83%E5%BC%8F%E5%AF%B9%E8%B1%A1#61-%E9%80 ...

  10. ASP.NET 中的 Session 怎么正确使用

    Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息.用户在应用程序的页面切换时,Session对象的变量不会被清除. 对于一个Web应用 ...