javascript - 下载名称中包含 '+' 字符的文件

标签 javascript c#

我正在处理一个 C# Web 系统,该系统具有上传和下载文件的功能。其中一些文件的名称或文件夹中恰好有“+”字符。

我发现“+”在 URL 中是有问题的,因为它代表串联,并且加号字符应编码为 %2b。

所以我尝试设置 newUrl =url.string.Replace("+", "%2b") 然后执行以下操作:

System.Net.WebClient req = new System.Net.WebClient();
req.UseDefaultCredentials = true;
byte[] buffer = req.DownloadData(newUrl);

最终导致下载失败和应用程序异常消息

"The remote server returned an error: (404) Not Found."

此外,尝试从浏览器访问该文件,或者作为 http://repository.mysite.figure+numbers.pdf或者 http://repository.mysite.figure%2bnumbers.pdf 最终出现错误 404。

看来已经没有退路了。查找文件“draw%2bnumbers.pdf”会失败,因为它不存在,但另一方面“draw+numbers.pdf”也会失败,因为没有“drawnumbers.pdf”。

除了重命名存储库中的所有文件和文件夹之外,还有其他解决方案吗?

最佳答案

这个问题有一个解决方案。检查这个link

默认情况下,IIS 不允许双重转义,这会阻止 + 字符在 URL 中正确显示。

答案已更新:

我们需要添加<requestFiltering allowDoubleEscaping="true" />在 webconfig 的安全部分中并重置 IIS 一次以使其工作。 就像这样:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <security>
      <requestFiltering allowDoubleEscaping="true" />
    </security>
  </system.webServer>
</configuration>

关于javascript - 下载名称中包含 '+' 字符的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35411084/

相关文章:

javascript - 如何修复 snapsvg.js 中蒙版的位置?

javascript - nightwatchjs - 如何等到ajax调用完成

c# - 移动服务 Azure 推送 URI

javascript - 导入 Moment.js 使 webpack 构建失败

javascript - IE11 - 对象不支持属性或方法 'contains'

c# - 改进 LINQ to EF 生成的 SQL 查询

c# - Elasticsearch NEST创建不区分大小写的索引

c# - 将参数传递给泛型类类型的构造函数

c# - sql 在一个字符串匹配上连接两个表

javascript - 如何获得在 iOS Safari 上工作的根 <html> 元素的基于动量的滚动?