首页 > 其他分享 >.NetCore中下载文件接口指定文件名时中文被替换为下划线(_)的问题

.NetCore中下载文件接口指定文件名时中文被替换为下划线(_)的问题

时间:2024-10-09 20:12:03浏览次数:1  
标签:下划线 stream 文件名 NetCore 接口 result name

  首先,我这里使用的.net6

  比如我有这样一个接口:

    public async Task<IActionResult> Download(string name)
    {
        //省略业务代码...
        
        return File(stream, "application/octet-stream", name);
    }

  这里下载的文件名时接口参数传进来的,然后我们调用接口,发现当我传的是文件名中包含中文时,会被替换为下划线(_):

  

  其实,查看源码,发现这是有意为之。

  在ContentDispositionHeaderValue 中,有如下代码处理(这里

    // Replaces characters not suitable for HTTP headers with '_' rather than MIME encoding them.
    private StringSegment Sanitize(StringSegment input)
    {
        var result = input;

        if (RequiresEncoding(result))
        {
            var builder = new StringBuilder(result.Length);
            for (int i = 0; i < result.Length; i++)
            {
                var c = result[i];
                if ((int)c > 0x7f || (int)c < 0x20)
                {
                    c = '_'; // Replace out-of-range characters
                }
                builder.Append(c);
            }
            result = builder.ToString();
        }

        return result;
    }

  这段代码其实就是要求文件名是ASCII编码中的33到126部分,就是一些常用的字符,否则使用下划线代替,也就是说不只是中文,包括空格等其它的一些字符也会被替换。

  那怎么处理这个问题呢?很简单,UrlEncode 处理一下就好了:

    public async Task<IActionResult> Download(string name)
    {
        //省略业务代码...
        
        name = HttpUtility.UrlEncode(name);
        return File(stream, "application/octet-stream", name);
    }

  

 

标签:下划线,stream,文件名,NetCore,接口,result,name
From: https://www.cnblogs.com/shanfeng1000/p/18341828

相关文章

  • NetCore 使用 SimpleTCP 实现双工通信
    十年河东,十年河西,莫欺少你穷学无止境,精益求精1、新建netcore控制台应用程序并引入包 2、服务端usingSimpleTCP;usingSystem;usingSystem.Net;usingSystem.Text;namespaceTcpServe{classProgram{staticvoidMain(string[]args)......
  • 数据库属性带下划线的注意事项(下划线bug)
    ①如果数据库的属性带有下划线,如下②实体类代码1packagecom.lian.pojo;23importcom.baomidou.mybatisplus.annotation.IdType;4importcom.baomidou.mybatisplus.annotation.TableField;5importcom.baomidou.mybatisplus.annotation.TableId;6importjava......
  • Windows——解除Windows系统中文件名和目录路径的最大长度限制
    第一步:打开本地组策略编辑器按下Win+R键打开运行窗口,输入gpedit.msc并回车,打开本地组策略编辑器。第二步:开启长路径设置第三步:重启计算机......
  • C#(.NetCore)接入AD域用户的实现
      很多公司电脑都是windows,而对用户的管理则很多采用AD域的形式来管理,本文简单的来介绍一下.NetCore中怎么接入AD域来实现登录等操作。  首先,我这里使用的是.net6,其它版本类似。  其次,这里假设你已经对AD域有了基本的了解,比如AD域所使用的LDAP、属性等,如果不了解先自行百......
  • netCore中的内置日志的使用
    1、netCore3.1中配置  参考链接: https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingMicrosoft.AspNetCore.Hosting;......
  • .NetCore MySqlException 多线程中(There is already an open DataReader associated w
    问题描述:其实标题只是遇到问题的其中之一,遇到三种异常信息如下:Lockwaittimeoutexceeded;tryrestartingtransaction大概意思:超过锁定等待超时;尝试重新启动事务 ThereisalreadyanopenDataReaderassociatedwiththisConnectionwhichmustbeclosedfirst.大......
  • 从url中获取文件名
    比如https://abc.com/files/xx.zip,或许xx//文件名转为小驼峰exportconstkebabCase_to_camelCase=(fileName)=>{//转换为小写,并用正则表达式替换每个分隔符后的字符为大写(除非它是字符串的第一个字符)constnewfileName=fileName.toLowerCase()//先转换为......
  • 盘点3款.NetCore(C#)开源免费商城系统
    CoreShop商城介绍核心商城系统(CoreShop) 是基于Asp.Net8.0、Uni-App开发、支持可视化布局的小程序商城系统;前后端分离,支持跨平台运行;拥有分销、代理、团购秒杀、接龙、拼团、直播、优惠券、自定义表单等众多营销功能,拥有完整SKU、下单、售后、物流流程,支持可视化自定义首......
  • 根据提供的【文件名】批量创建文件
    需求如下:根据提供的多个【文件名】来批量创建word文件;注意:在一个【空文件夹】中放置该脚本需要创建的名字如下:==============================P1-如何学习英语音标P2-2017音标第1课发音特点P3-2017音标第2课划分音节P4-2017音标第3课元音1P5-2017音标第4课元音2P6......
  • NetCore Channel-生产者&消费者
    usingSystem.Threading.Channels;namespaceChannelDemo{publicclassChannelMgr{//优势//允许开发者根据需要创建具有固定容量(有界)或无限容量(无界)的通道//staticChannel<string>channel=Channel.CreateBounded<strin......