在后端中用源码实现文件的上传和下载
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了,相关的使用方法就自己查阅了,还有很多的工具类,不过都是对操作的源码进行打包封装,方便人们使用。