根据URL地址值获取附件并在浏览器下载保存

	/**
	 * 根据URL地址下载附件
	 * @param response
	 * @param fileUrl	文件路径
	 * @param nameOfPDF 自定义文件名
	 */
	public static void invoiceDownload(HttpServletResponse response, HttpServletRequest request,String fileUrl, String nameOfPDF) throws Exception{
		ServletOutputStream out = null;
		InputStream ips = null;
		URL oracle = null;
		oracle = new URL(fileUrl);
		HttpURLConnection uc = null;
		uc = (HttpURLConnection) oracle.openConnection();
		uc.setDoInput(true);
		uc.connect();
		//文件名
		String newFileName = fileName(fileUrl);
		ips =  uc.getInputStream();
		response.setContentType("multipart/form-data");
		//为文件重新设置名字
		String userAgent = request.getHeader("USER-AGENT");//获取浏览器版本
		if(StringUtils.contains(userAgent, "MSIE")){//IE浏览器
			nameOfPDF = URLEncoder.encode(nameOfPDF,"UTF8");
		}else if(StringUtils.contains(userAgent, "Mozilla")){//google,火狐浏览器
			nameOfPDF = new String(nameOfPDF.getBytes(), "ISO8859-1");
		}else{
			nameOfPDF = URLEncoder.encode(nameOfPDF,"UTF8");//其他浏览器
		}
		response.addHeader("Content-Disposition", "attachment; filename=\"" + nameOfPDF + ".pdf\"");
		out = response.getOutputStream();
		//读取文件流
		int len = 0;
		byte[] buffer = new byte[1024 * 10];
		while ((len = ips.read(buffer)) != -1){
			out.write(buffer,0,len);
		}
		out.flush();
		out.close();
		ips.close();
		return ;
	}
	/**
	 * 获取文件名字
	 * @param fileName
	 * @return
	 */
	private static String fileName(String fileName){
		if (StringUtils.isNotBlank(fileName)) {
			int offset = fileName.lastIndexOf("/");
			if (offset != -1 && offset != fileName.length() - 1) {
				String ext = fileName.substring(offset + 1);
				return ext.toLowerCase();
			}
		}
		return "";
	}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要让浏览器访问URL后自动下载文件,需要在请求头中设置Content-Disposition字段的为attachment,示例代码如下: ``` Content-Disposition: attachment; filename="filename.ext" ``` 其中,filename是要下载的文件名,ext是文件扩展名。这样设置后,浏览器就会弹出文件下载框,让用户选择保存文件的位置。 ### 回答2: 如果你想要让浏览器访问一个URL后自动下载文件,你需要在请求头中添加以下信息: 1. Content-Disposition: attachment; filename="filename.ext" 这个请求头告诉浏览器将文件作为附件下载,而不是在浏览器中打开。其中,"filename.ext"应替换为你想要的文件名和扩展名。 2. Content-Type: application/octet-stream 这个请求头告诉浏览器将文件以二进制流的形式进行下载。不同的文件可能需要使用不同的Content-Type,你可以根据具体情况进行调整。 3. Content-Length: file_size 这个请求头告诉浏览器下载文件的大小,其中file_size应替换为文件的实际大小。这个请求头对于大文件下载时特别重要,可以让浏览器正确地显示下载进度。 综上所述,当你向浏览器返回一个带有以上请求头的URL时,浏览器会自动触发下载行为,将文件保存到本地计算机的默认下载位置。 ### 回答3: 要让浏览器访问一个URL后自动下载,你需要在请求头中写入以下信息: 1. 请求方法(Request Method):将请求方法设置为"GET",表示获取资源。 2. 内容类型(Content Type):在"Content Type"字段中,设置为适当的MIME类型,以告知浏览器下载的文件类型。例如,如果要下载一个PDF文件,可以将"Content Type"设置为"application/pdf"。 3. 内容描述(Content Disposition):在"Content Disposition"字段中,设置为"attachment",以指示浏览器需要将响应作为附件下载,而不是直接在浏览器中打开。同时,还需要通过设置"filename"参数来指定下载后的文件名。例如,"Content Disposition"字段可以设置为"attachment; filename=myfile.pdf"。 以下是一个示例请求头的示意: GET /download/file HTTP/1.1 Host: www.example.com Content-Type: application/pdf Content-Disposition: attachment; filename=myfile.pdf 请注意,以上只是示意请求头的部分信息,实际应用中还可能需要包含其他必要的字段和信息,具体根据你的应用场景和需求来确定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值