java 下载项目中的文件_javaweb项目中的文件上传下载功能的实现

框架是基于spring+myBatis的。

前台页面的部分代码:

上传文件:

class="easyui-validatebox" data-options="required:true">上传

*上传文件格式为xls,xlsx,txt,csv文件!  

{

title : '操作',

halign : 'center',

align : 'center',

width : 80,

field : 'FILE_PATH',

formatter: function(value,row,index){

var path = "${ctx}/file/download.do?filePath=" + value ;

var button = '

data-options="required:true">下载

';

return "" + button +  "";

}

上传功能的方法:

@RequestMapping("/upLoadFile")

public String upload(@RequestParam(value = "file", required = false) MultipartFile file, ModelMap model, HttpServletRequest request)

throws Exception {

//设置相对路径

String realPath = request.getSession().getServletContext().getRealPath("/upload");

//获取文件的格式

String extention = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);

//对格式进行筛选

if(extention.equalsIgnoreCase("xls") || extention.equalsIgnoreCase("xlsx") || extention.equalsIgnoreCase("txt")

|| extention.equalsIgnoreCase("csv")) {

//在路径下创建文件夹

File f = new File(realPath);

String fileName = file.getOriginalFilename();

String uploadPath = realPath + File.separator + fileName;

if(!f.exists()) {

f.mkdir();

}

//文件的传输

file.transferTo(new File(uploadPath));

Upload upload = new Upload();

upload.setFileName(fileName);

upload.setFileLength(String.valueOf(file.getSize()));

upload.setFileOwner(super.getLoginUser(request).getLoginId());

upload.setFilePath("/upload/" + fileName);

//将文件的基本信息存到数据库

fileQueryService.saveFile(upload);

request.setAttribute("info","文件上传成功!");

} else {

request.setAttribute("info","文件类型不正确,请上传格式为xls,xlsx,txt,csv文件!");

}

return "page/file/fileInteraction";

}

下载功能的方法:

@RequestMapping("/download")

public String download(String filePath, HttpServletRequest request,

HttpServletResponse response) {

try {

//获取文件名

String fileName = filePath.substring(filePath.lastIndexOf("/")+1);

System.out.println(filePath);

response.setCharacterEncoding("utf-8");

response.setContentType("multipart/form-data");

//处理下载弹出框名字的编码问题

response.setHeader("Content-Disposition", "attachment;fileName="

+ new String( fileName.getBytes("gb2312"), "ISO8859-1" ));

//获取文件的下载路径

String path = request.getSession().getServletContext().getRealPath(filePath);

System.out.println(path);

//利用输入输出流对文件进行下载

InputStream inputStream = new FileInputStream(new File(path));

OutputStream os = response.getOutputStream();

byte[] b = new byte[2048];

int length;

while ((length = inputStream.read(b)) > 0) {

os.write(b, 0, length);

}

// 这里主要关闭。

os.close();

inputStream.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

//  返回值要注意,要不然就出现下面这句错误!

//java+getOutputStream() has already been called for this response

return null;

}

最终效果:

9e67705c024068809eae2994c0f4b434.png

下载页面:

6ded7bc1866ce6b4bdaa7bbef7830c70.png

文件的上传和下载完整版demo下载:

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值