java文件上传源码下载_Java实现文件的上传下载(含源代码和jar包)

本文介绍如何在SpringBoot应用中实现文件上传功能,包括创建数据库表存储文件名,使用MultipartFile处理上传,以及通过Ajax进行文件上传。同时,详细阐述了文件下载过程,包括从数据库检索文件名和构建下载路径,以及为何下载请求需用传统方式而非Ajax。
摘要由CSDN通过智能技术生成

1.需要使用的jar包

dfff5ca36367d806e964fd14cd9f12be.png

链接: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) throwsIllegalStateException, 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= newFile(path,filename);//判断路径是否存在,如果不存在就创建一个

if (!filepath.getParentFile().exists()) {

filepath.getParentFile().mkdirs();

}//将上传文件保存到一个目标文件当中

file.transferTo(new File(path + File.separator +filename));

userService.insertFileByFileName(filename); //将文件的名字存入数据库//输出文件上传最终的路径 测试查看

returnString.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) throwsIOException {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 = newFileInputStream(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();

}

前台:

下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值