我将此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项目有一个名为&#34; App_Data&#34;的文件夹。其中 包含名为&#34; MinimalSpreadsheetLight.xlsx&#34;
的文件下载链接确实在页面上呈现,并且点击它确实首先出现下载文件(它有Excel图标,并且带有文件名),但是在它之下它表示&#34;失败 - 没有文件&#34;:
我的HTML,我使用的路径,文件权限或什么问题?
到目前为止,我只用Chrome测试了这个,BTW。 IOW,它不是IE问题。
我也尝试了一个领先的波浪形的人:
builder.Append("<a href=\"~/App_Data/MinimalSpreadsheetLight.xlsx\" download=\"Spreadsheet file\">");
......但是,唉,无济于事。
我将相关的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">
...但链接根本没有出现。
我被this reference误导,显示没有添加任何文字;我将代码更改为:
builder.Append("<a href=\"App_Data/MinimalSpreadsheetLight.xlsx\" download=\"Minimal Spreadsheet file\">Spreadsheet file</a>");
...(添加&#34;电子表格文件&#34;并关闭锚标记),现在出现链接;但是,我仍然得到了#34;失败 - 没有文件&#34; msg,然后双击&#34;下载的文件&#34;什么都不做。
我尝试了在Update 3中看到的其他两种排列方式,即在&#34; App_Data&#34;之前重新引入了前向错误:
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>");
...但结果在任何这些排列中都是相同的(&#34;失败 - 没有文件&#34;)。
我也尝试过没有&#34; App_Data&#34;根本不需要关闭变更:
builder.Append("<a href=\"MinimalSpreadsheetLight.xlsx\" download=\"Minimal Spreadsheet download\">Spreadsheet file</a>");
...但相同&#34;失败 - 没有文件&#34;也是这种尝试的结果。
好的,所以我也试过了(单引号):
builder.Append("<a href='/App_Data/MinimalSpreadsheetLight.xlsx' download='Minimal Spreadsheet file'>Spreadsheet file</a>");
......但没有变化。文件在那里:
...为什么没有看到或无法访问?
此:
string fullPath = HttpContext.Server.MapPath("~/App_Data/MinimalSpreadsheetLight.xlsx");
...(我从here获得)无法编译,&#34; 非静态字段,方法或属性需要对象引用系统.Web.HttpContext.Server.get&#39;
2点击错误信息突出显示&#34;服务器&#34;
这(我从与我在Update 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>
我注意到进一步细齿梳理时,url2有一个向前的敲击声;我改变它以便所有的重击都回来了,但是对于Update 8的结果没有任何区别:点击链接什么都不做。
如果有人解决了这个问题,那么事后肯定会被识别出来。
也许我真正需要做的是,而不是简单的html,添加一些将下载该文件的jQuery。但问题是,jQuery能否比原始/简单的html更好地访问App_Data文件夹?
答案 0 :(得分:2)
app_data文件夹被iis和asp.net用作私有区域,用于放置只能由服务器上运行的代码访问的数据库文件。
如果您尝试通过浏览器直接访问该文件夹,则会收到权限错误。
为了让这些文件可供下载,请将它们移到“内容”下的文件夹中。 (如果你有一个mvc站点)并确保你的web.config允许下载.xlsx exention。
这可能取决于您使用的iis版本。