C#Web MVC + Angular
我的网页上有以下链接:
<a ng-show="channel.ArtistImagepath != null" ng-href="/channel/DownloadImageFile/?filepath={{channel.ArtistImagepath}}" target="_blank"><i class="fa fa-download" style="color: green"></i> Artist Image</a><br/>
当我在浏览器中复制链接时,它是:
//mysite/channel/DownloadImageFile/?filepath=ChannelUploads/b51535d5-4ea3-45ae-bda4-332a0ce19ee8Artist+Gomez.jpg
当我点击链接时,发送到我的控制器的文件路径是: ChannelUploads / b51535d5-4ea3-45ae-bda4-332a0ce19ee8ArtistDina Gomez.jpg
正如您所看到的,+符号被文件名中的空格替换,因为URL已经过编码。这导致找不到文件错误消息..我服务器上存在的实际文件名是:b51535d5-4ea3-45ae-bda4-332a0ce19ee8Artist + Gomez.jpg
public ActionResult DownloadImageFile(string filepath)
{
filepath = "https://marvment.com/" + filepath;
var type = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
var path = Path.GetFileName(filepath);
path = HttpUtility.UrlEncode(path);
//path = ToUrlFriendlyString(path);
using (var client = new WebClient())
{
var buffer = client.DownloadData(filepath);
return File(buffer, type.ToString(), path);
}
}
如何在将文件名发送到控制器之前阻止文件名进行beign URL编码? 我想在文件名中保留+号并在我的MVC控制器中处理编码。
答案 0 :(得分:1)
如何防止文件名在发送前进行beign URL编码 它到我的控制器?
实际上它与您需要做的完全相反:确保您的URL参数(文件名)在首先被提供给浏览器之前进行了URL编码。在这种情况下,这应该在Angular中完成;见How to generate url encoded anchor links with AngularJS?
您无法在控制器操作中正确解决此问题,因为当操作获取文件名时,它已自动为您解码。