文件下载demo,文件名称包含特殊字符

public static void main(String[] args) {

	try {
		String sql="";//查询文件信息sql
		Map fileMap=new HashMap<String,String>();//获取到文件相关信息,这里只是演示,没有具体实现
		
		
		String FileName = (String) fileMap.get("FileName"); //文件名
		String  filenum=(String) fileMap.get("filenum");//存放在服务器上的具体名称
		String filename = filenum + FileName.substring(FileName.lastIndexOf(".")); // 存到到服务器上的名称

		
		String folder = (String) fileMap.get("FilePath"); // 附件所在目录
		String newFolder = folder.toLowerCase();
		String appPath="";//服务器路径
		String fullfilepath = fullfilepath =appPath + folder + File.separator + filename; // 文件所在硬盘的真实路径


		/* 读取文件 */
		File file = new File(fullfilepath);
		

		if (file.exists()) {
			HttpServletResponse response =null;
			response.reset();
			String extFileName = FileName.substring(FileName.lastIndexOf(".") + 1);
			HttpServletRequest request=null;
			String userAgent = request.getHeader("User-Agent");
			// IE内核浏览器
			if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
				FileName = java.net.URLEncoder.encode(FileName, "UTF-8");
			} else {
				// 非IE浏览器的处理:
				FileName = new String(FileName.getBytes("UTF-8"), "ISO-8859-1");
			}
			String contentType = "application/x-msdownload";
		
			// 直接提示下载
		
			response.setHeader("Content-disposition",
					String.format("attachment; filename=\"%s\"", FileName));
		//	response.setContentType("multipart/form-data");
			response.setCharacterEncoding("UTF-8");
			response.setContentType(contentType);
			int fileLength = (int) file.length();
			response.setContentLength(fileLength);
			/* 如果文件长度大于0 */
			if (fileLength != 0) {
				/* 创建输入流 */
				InputStream inStream = new FileInputStream(file);
				byte[] buf = new byte[4096];
				/* 创建输出流 */
				ServletOutputStream servletOS = response.getOutputStream();
				int readLength;
				while (((readLength = inStream.read(buf)) != -1)) {
					servletOS.write(buf, 0, readLength);
				}
				inStream.close();
				servletOS.flush();
				servletOS.close();

			}
		} else {
			System.out.println("文件不存在");//实际上这里应该是日志输出
		}
	} catch (Exception e) {
		//日志输出
		System.out.println("文件下载出错!");
		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言提供了多种方式来实现文件下载demo。 一种简单的实现方式是使用net/http包中的ServeFile函数来提供文件下载服务。以下是一个示例代码: ```go package main import ( "log" "net/http" ) func main() { fs := http.FileServer(http.Dir("files")) // 将files目录下的文件作为静态文件服务器 http.Handle("/files/", http.StripPrefix("/files/", fs)) // 配置路由 http.HandleFunc("/download", func(w http.ResponseWriter, r *http.Request) { filePath := "files/demo.txt" // 要下载文件路径 http.ServeFile(w, r, filePath) }) log.Println("Listening on :8080...") err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal(err) } } ``` 在上述代码中,首先使用http.FileServer函数将files目录下的文件作为静态文件服务器,然后使用http.Handle函数配置路由,将文件服务器的处理路径配置为/files/。接着使用http.HandleFunc函数配置/download路径的处理函数,该函数调用http.ServeFile函数实现文件下载。 另一种实现方式是使用gin框架,该框架提供了更多的功能和便捷的API。以下是一个使用gin框架实现下载文件demo示例: ```go package main import ( "github.com/gin-gonic/gin" "log" "net/http" ) func main() { r := gin.Default() r.Static("/files", "./files") // 配置静态文件路由 r.GET("/download", func(c *gin.Context) { filePath := "files/demo.txt" // 要下载文件路径 c.File(filePath) }) log.Println("Listening on :8080...") err := r.Run(":8080") if err != nil { log.Fatal(err) } } ``` 在上述代码中,首先使用gin.Default()初始化一个gin引擎,然后使用r.Static函数配置/files的静态文件路径。接着使用r.GET函数配置/download路径的处理函数,该函数调用c.File函数实现文件下载。 以上就是使用Go语言实现文件下载的两种简单示例,可以根据具体需求选择适合的方式来实现文件下载服务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值