java web使用流下载服务器上文件

    使用流下载文件需要注意的是ajax发送的请求不能浏览器响应,需要使用http请求发送。原因是因为response原因,一般请求浏览器是会处理服务器输出的response,例如生成png、文件下载等,然而ajax请求只是个“字符型”的请求,即请求的内容是以文本类型存放的。还有a其他人是认为ajax方式请求的数据只能存放在javascipt内存空间,可以通过javascript访问,但是无法保存到硬盘,因为javascript不能直接和硬盘交互,否则将是一个安全问题。
    这里写一个前后台的例子来说明如何使用http请求来从服务器tomcat中下载一个word文件。

前台代码

    url指的是将要发送到后台的URL,使用form表单来提交

var form = $("<form></form>");
form.attr("style","display:none");
form.attr("target","_blank");
form.attr("method","post");
form.attr("action",url);
$(document.body).append(form);
form.submit();
后台代码

在tomcat对应的路径下放置所需要的文件

@requestMapping("downloadWord")
public void download(HttpServletRequest request,HttpServletResponse response, String fileName) throws IOException{
		//上传的文件是保存在/WEB-INF/upload目录下
		String fileSaveRootPath = request.getServletContext().getRealPath("/WEB-INF/upload/test.docx");
		//得到要下载的文件
		File file = new File(fileSaveRootPath);
		//如果文件不存在
		if(!file.exists()){
			request.setAttribute("message", "您下载的资源已被删除");
			return;
		}
		//处理文件名
		String realname = "test.docx";
		//设置响应头,控制浏览器下载该文件
		response.setHeader("content-Disposition", "attachment;filename="+URLEncoder.encode(realname,"UTF-8"));
		//读取要下载的文件,保存到文件输入流
		FileInputStream in = new FileInputStream(fileSaveRootPath);
		//创建输出流
		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();
	}

猜你喜欢

转载自blog.csdn.net/qq_39071530/article/details/80897486
今日推荐