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. 将raspberry 3B+的apt替换为国内源

    前段时间买了一块树莓派,想着自己拿来玩一下下(没什么钱烧更好的硬件,只能玩这个了,好在还够玩).于是就折腾起来,装了raspberry的系统. 这时候,因为默认apt是国外的源,在GFW这种神奇东西的 ...

  2. 一个memset导致的血案

    本文记录解答MIT 6.828 Lab 1 Exercise 10时遇到的一个Bug. 问题描述 在i386_init入口处设置断点并运行,发现执行memset(edata, 0, end - eda ...

  3. Redis提供的持久化机制

    Redis是一种面向“key-value”类型数据的分布式NoSQL数据库系统,具有高性能.持久存储.适应高并发应用场景等优势.它虽然起步较晚,但发展却十分迅速. 近日,Redis的作者在博客中写到, ...

  4. Linux下安装jdk中遇到的坑

    比如:我以jdk-8u211-linux-i586.tar.gz为例进行. 下载完成后解压到指定文件下先创建java文件目录,如果已存在就不用创建[root@lyh:] # mkdir -p /usr ...

  5. 恩佐夫博弈+JAVA大数

    题意:http://acm.hdu.edu.cn/showproblem.php?pid=5973 根号5复制后200位就行了,因为BigDecimal不支持开根号,除法二分开根. import ja ...

  6. Android Monkey压测命令

    测试步骤:1.安装ADB2.连接被测手机和电脑3.打开CMD命令行4.输入monkey命令adb shell monkey -p your.package.name --pct-touch 30 -- ...

  7. WPF入门(2)——数据绑定与INotifyPropertyChanged(INPC)

    接上篇,我们在MainViewModel类中创建个属性: public string Name { get; set; } 然后去UI的xaml文件中binding一下: 此时运行程序是不会得到我们想 ...

  8. Python 语言简介与入门

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  9. 7-MySQL DBA笔记-研发规范

    第7章 研发规范 本章将为读者解读一份研发规范.为了更好地协同工作和确保所开发的应用尽可能的稳定.高效,建立一套数据库相关的研发规范是很有必要的,虽然研发规范的确立和推广是一项很耗时的工作,但所取得的 ...

  10. tinymce富文本是在modal框中弹出显示的问题

    记录一下,在用tinymce富文本的时候,由于是用在modal 上的,始终无法获取焦点,后来才发现问题出在tinymce在modal前创建了,所以导致这个问题,解决方案就是用 v-if="v ...