首页 > 其他分享 >下载文件时处理URL中出现特殊字符

下载文件时处理URL中出现特殊字符

时间:2024-04-10 17:02:19浏览次数:24  
标签:字符 String 编码 URL filename 特殊字符 new 下载

文章目录

概要

在URL中,有些字符具有特殊含义或可能引起歧义因此需要进行编码以确保在网络上传输时能正确解释。

例如:

  1. 空格:空格在URL中会被编码为 %20 或 +,因为在URL中空格是不允许的。

  2. 保留字符:某些字符在URL中具有特殊含义,如 &, =, ?, #, +, %等被称为保留字符。这些字符在某些情况下需要被编码,以免被误解为URL的组成部分。

  3. 非ASCII字符:非ASCII字符(如汉字、俄文等)需要进行编码,因为URL中只允许ASCII字符。

  4. 特殊符号:除了保留字符外,一些特殊符号像斜杠 /, 冒号 :, 问号 ?, 井号 #等都可能需要进行编码,以避免对URL的解析造成混淆。

  5. 控制字符和非打印字符:控制字符和非打印字符(如换行符、回车符等)在URL中不能直接出现,需要根据规范进行编码。

整体架构流程

 1.springboot
 2.spring-boot-starter-thymeleaf
 3.spring-boot-starter-web
 4.commons-io

技术名词解释

  1. springboot:Spring Boot 是一个用于快速构建基于 Spring 框架的应用程序的工具。
  2. spring-boot-starter-thymeleaf:Java模板引擎
  3. spring-boot-starter-web:快速构建基于 Spring MVC 的 Web 应用程序。
  4. commons-io : Apache Commons 工具库中的一个子项目,提供了许多操作输入输出的实用方法,以简化常见的 I/O 操作。

技术细节

controller代码

 @GetMapping("/download")
    public ResponseEntity<byte[]> fileDownload(String filename,HttpServletRequest request) throws Exception {
            
        String dirPath = "c:" + File.separator + "file" + File.separator;
        File file = new File(dirPath + File.separator + filename);
        //创建http头
        HttpHeaders headers = new HttpHeaders();
        //告诉浏览器要将收到的内容作为附件处理;filename 是要附加的文件名
        // 要让浏览器成功显示下载的文件名需要编码
        filename = getFilename(request, filename);
        headers.setContentDispositionFormData("attachment", filename);
        //设置内容类型为二进制流数据的类型
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        try {
            return new ResponseEntity<>(FileUtils.readFileToByteArray(file),
                    headers, HttpStatus.OK);
        } catch (Exception e) {
            e.printStackTrace();
            return new ResponseEntity<byte[]>(e.getMessage().getBytes(),
                    HttpStatus.EXPECTATION_FAILED);
        }
    }
 private String getFilename(HttpServletRequest request, String filename)
            throws Exception {
		//IE浏览器的关键词
        String[] IEBrowserKeyWords = {"MSIE", "Trident", "Edge"};
        //获取用户代理信息/客户端信息
        String userAgent = request.getHeader("User-Agent");
        System.out.println("userAgent = " + userAgent);
        for (String keyWord : IEBrowserKeyWords) {
            if (userAgent.contains(keyWord)) {
            	// 如果包含这几个关键词将文件名重新进行编码成urf-8(文件名可能出现特殊字符)
                //字符串转换为一个以 UTF-8 编码的字节数组
                return URLEncoder.encode(filename, "UTF-8").replace("+"," ");
            }}
    //文件名重新编码成ISO_8859_1
        return new String(filename.getBytes("UTF-8"), "ISO-8859-1");
    }

templates代码

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>文件下载</title></head>
<body>
<div style="margin-bottom: 10px">文件下载列表:</div>
<table>
    <tr>
        <td>bloglogo.jpg</td>
        <td><a th:href="@{/download(filename='bloglogo.jpg')}">下载文件</a></td>
    </tr>
    <tr>
        <td>春天机器人</td>
        <td><a th:href="@{/download(filename='Spring Boot')}">
            下载文件</a></td>
    </tr>
</table>
</body>
</html>

成功显示
在这里插入图片描述

标签:字符,String,编码,URL,filename,特殊字符,new,下载
From: https://blog.csdn.net/TTruYi/article/details/137563862

相关文章

  • 轻松下载阿里巴巴商品图片,提升商品效果!
    在如今的网络时代,图片已成为商品展示的重要手段。尤其是在电商网购的领域,优质的商品图片往往能够吸引更多消费者驻足。电商网购平台上,拥有着大量的商品图片。然而,这些图片分散在各个店铺之中,对于需要大量图片的商家来说,手动下载无疑是一项耗时又费力的工作。因此,如何轻松下载阿......
  • 抖音视频评论提取工具|评论ID批量采集下载拓客软件
    解放你的音营销!抖音评论提取工具助你轻松拓客!随着音平台的火爆,如何有效地进行营销和拓客成为了许多企业和个人关注的焦点。针对这一需求,我们推出了全新的评论提取工具,让你轻松抓取关键词相关的视频评论,助力你的营销策略!主要功能:关键词搜索视频评论抓取:只需输入任务名称、......
  • minio本地文件上传/远程url上传
    //本地文件上传<inputtype="file"id="fileInput"multiple@change="handleFileUpload">//进度条<el-progressclass="progress":percentage="Number(percentage)"v-if="percentage&&percentage&......
  • 下载高手教你如何下载下厨房小程序图片素材
    小程序音频、图片、视频素材如何下载,这里给大家推荐一个工具:下载高手它不需要你懂HTTP知识,不需要像程序员一样分析数据包这个工具的名字是:下载高手下载高手链接:https://pan.baidu.com/s/1qJ81sNBzzzU0w6DWf-9Nxw?pwd=l09r 提取码:l09r --来自百度网盘超级会员V10的分享......
  • jdk1.7设置URLConnection的TLS
    jdk1.7无法下载https的图片,需要修改下代码。兼容TLSv1.2。/** * *@paramimageUrl *@return *@throwsIOException *@throwsNoSuchAlgorithmException *@throwsKeyManagementException */ publicstaticFiledownloadImageToTempFile(StringimageUrl)throwsIOE......
  • 浅谈从浏览器输入URL到页面渲染的流程
    浏览器输入URL到页面渲染完成,这个过程大致可分为两个阶段:网络通信和页面渲染。一、网络通信互联网内各网络间设备的通信遵循TCP/IP协议,利用TCP/IP协议进行网络通信时,会通过分层与对方通信。数据传输的过程:由应用层产生数据后,经过传输层的分段处理(添加TCP或UDP包头)、网络层(添加IP......
  • Qt - Qt Creator下载与安装
    一、QtCreator简介Qt是一个跨平台应用开发框架。QtCreator是一个跨平台的集成开发环境(IDE),集成了Qt所提供的功能,可以单独下载使用,也可以结合Qt组合使用。二、QtCreator下载下载地址:https://download.qt.io/archive/(1)进入下载界面后,选择下qt文件夹,或者qtcreator文件夹。(2......
  • sky光遇 steam商店找不到、下载失败的解决方法
    在充满梦幻与神秘的冒险世界里,sky光遇以其独特的画风和温馨的社交解密玩法,吸引了无数玩家的目光。然而,当热情满满的玩家们想要在steam商店寻找并下载这款游戏时,有时却会遭遇找不到游戏或下载失败的问题。为了帮助大家顺利进入这片美妙的天空王国,我们精心整理了几个实用的解决方......
  • 69文章解读与程序——太阳能学报EI\CSCD\北大核心《考虑用户侧柔性负荷的社区综合能
    ......
  • 68文章解读与程序——电力自动化设备EI\CSCD\北大核心《基于混沌模拟退火粒子群优化
    ......