关于文件上传和下载

本文详述了后端如何处理文件上传和下载,包括从前端获取二进制流,后端处理流程,利用RandomAccessFile精确读取文件内容,设置响应头实现文件下载,以及批量下载的实现方式。

在后端中用源码实现文件的上传和下载
1,首先,前端通过form表单设置input标签type属性为file,然后enctype属性为mutilpart/form-data,提交表单传输二进制流。

2,在后端利用inputstream获取request.getInputStream()方法实例,利用inputstream流的read方法读取数据然后write到一个temp临时文件里。

3,我们直接通过request.getInputstream获取的二进制流文件是包含着request的一些头信息和上传的文件信息,在文件尾还有注释,也就是说直接读取的文件不是上传的文件内容,我们需要利用文件指针读取真正的文件内容。

4,利用RandomAccessFile类读取temp文件,假设文件的前两行是额外的信息,还有最后一行是注释,我们读取到第二个/n符的时候,获取位置然后加一得到初始位置startIndex,然后倒序读取到/n符时,获取末始位置endIndex,然后利用初始位置和末始位置读取到真正的文件内容。

5,将读取到的内容保存在想要保存的路径下,完成上传,关闭输入输出流,删除temp临时文件,还有中间的一些细节我就不一一赘述了。

6,然后就是下载了,点击下载后,在后端得到想要下载的文件名,设置response.setContentType("application/x-msdownload);或者设置类型为application/octet-stream,让浏览器以相应的文件类型来解析文件,然后设置response.setHeader(“content-disposition”, “attachment;filename=” + URLEncoder.encode(realname, “UTF-8”));使浏览器以接收附件的方式接收文件,然后通过Outputstream=response.getOutputstream()获取到实例,然后用write方法传到浏览器,完成下载,关闭连接。

7,还有批量下载,批量下载的话就是利用一个打包类(例如zip)打包所有文件,传给浏览器就ok了。

#然后一般我们开发的话都是用的相关的工具栏,用的最多的就是fileupload和smartupload了,相关的使用方法就自己查阅了,还有很多的工具类,不过都是对操作的源码进行打包封装,方便人们使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值