我将此 HTML 添加到通过 REST 调用呈现的页面中:
StringBuilder builder = new StringBuilder();
. . .
builder.Append("<p></p>");
builder.Append("<a href=\"/App_Data/MinimalSpreadsheetLight.xlsx\" download>");
builder.Append("<p></p>");
. . .
return builder.ToString();
我的 ASP.NET Web API 项目有一个名为“App_Data”的文件夹,其中包含一个名为“MinimalSpreadsheetLight.xlsx”的文件
下载链接确实呈现在页面上,首先单击它确实会出现以下载文件(它有 Excel 图标,并带有文件名),但在其下方显示“失败 - 无文件”:
是我的 HTML 的问题,还是我正在使用的路径,或者文件权限,还是什么?
到目前为止,我只用 Chrome 测试过这个,顺便说一句。IOW,这不是 IE 问题。
更新
我也用领先的波浪线尝试了它:
builder.Append("<a href=\"~/App_Data/MinimalSpreadsheetLight.xlsx\" download=\"Spreadsheet file\">");
......然而,唉,无济于事。
更新 2
我将 HTML 的相关行更改为:
builder.Append("<a href=\"App_Data/MinimalSpreadsheetLight.xlsx\" download=\"Minimal Spreadsheet file\">");
...它像这样显示在源代码中(带有一些上下文):
<p>(Invoice Count excludes credits and re-delivery invoices)</p><p></p><p></p><a href="App_Data/MinimalSpreadsheetLight.xlsx" download="Minimal Spreadsheet file">
...但链接根本没有出现。
更新 3
我被这个引用误导了,它显示没有添加任何文本;我将代码更改为:
builder.Append("<a href=\"App_Data/MinimalSpreadsheetLight.xlsx\" download=\"Minimal Spreadsheet file\">Spreadsheet file</a>");
...(添加“电子表格文件”并关闭锚标记),现在出现链接;但是,我仍然收到“失败 - 无文件”消息,并且 2-单击“下载的文件”什么也不做。
更新 4
我尝试了更新 3 中看到的其他两种排列方式,即在“App_Data”之前重新引入前向重击:
builder.Append("<a href=\"/App_Data/MinimalSpreadsheetLight.xlsx\" download=\"Minimal Spreadsheet file\">Spreadsheet file</a>");
...并带有波浪形的前置和向前的敲击:
builder.Append("<a href=\"~/App_Data/MinimalSpreadsheetLight.xlsx\" download=\"Minimal Spreadsheet file\">Spreadsheet file</a>");
...但是在任何这些排列中结果都是相同的(“失败 - 无文件”)。
更新 5
我还尝试了完全没有“App_Data”的情况,在不需要的关闭更改上:
builder.Append("<a href=\"MinimalSpreadsheetLight.xlsx\" download=\"Minimal Spreadsheet download\">Spreadsheet file</a>");
...但同样的“失败 - 无文件”也是该尝试的结果。
更新 6
好的,所以我也尝试了这个(单引号):
builder.Append("<a href='/App_Data/MinimalSpreadsheetLight.xlsx' download='Minimal Spreadsheet file'>Spreadsheet file</a>");
...但没有变化。该文件在那里:
...那么为什么看不到或无法访问它?
更新 7
这个:
string fullPath = HttpContext.Server.MapPath("~/App_Data/MinimalSpreadsheetLight.xlsx");
...(我从这里得到)无法编译,“非静态字段、方法或属性‘System.Web.HttpContext.Server.get’需要对象引用
2-单击错误消息突出显示“服务器”
更新 8
这个(我从与我在更新 7 中尝试过的相同的地方得到的):
string justDataDir = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();
string url2 = string.Format("<a href='{0}/MinimalSpreadsheetLight.xlsx' download='Minimal Spreadsheet file'><button type=\"button\">Spreadsheet file</button></a>", justDataDir);
builder.Append(url2);
...什么也没做; 点击链接现在甚至没有给我一个假/失败的下载......
justDataDir 是:
C:\Projects\ProActWebReports\ProActWebReports\App_Data
url2 是:
<a href='C:\Projects\ProActWebReports\ProActWebReports\App_Data/MinimalSpreadsheetLight.xlsx' download='Minimal Spreadsheet file'><button type="button">Spreadsheet file</button></a>
更新 9
我注意到在进一步的细齿梳理中 url2 有一个向前的敲击;我对其进行了更改,以使所有的问题都恢复了,但这对 Update 8 的结果没有影响:单击该链接没有任何作用。
如果有人解决了这个问题,它肯定会在事后得到奖励。
更新 10
也许我真正需要做的是,而不是简单的 html,添加一些 jQuery 来下载文件。但问题是,jQuery 能否比原始/简单 html 更好地访问 App_Data 文件夹?