下载Excel文件

本文关键字:文件 Excel 下载 | 更新日期: 2023-09-27 18:27:06

我在这里读过一些关于如何从网站下载Excel文件的文章。所以,我设置了以下代码:

string path = MapPath(fname);
string name = Path.GetFileName(path);
string ext = Path.GetExtension(path);
string type = "application/vnd.ms-excel";

if (forceDownload)
{
    Response.AppendHeader("content-disposition",
        "attachment; filename=" + name);
}
if (type != "")
{
    Response.ContentType = type;
    Response.WriteFile(path);
    Response.End();
}

但是,我没有得到下载对话框。

我在IE 8和FireFox 10.0.2中都尝试过。
文件在那里,它没有被锁定,也没有设置为只读
我不确定我错了。

下载Excel文件

根据此链接,您需要添加以下行:

strFileName = Path.GetFileName(path);
Response.TransmitFile( Server.MapPath(strFileName) );

这将导致弹出一个"打开/另存为"对话框,其中的文件名SailBig.jpg是预设的默认文件名。

当然,这是假设您正在馈送一个已经存在的文件。如果你需要动态生成的提要,比如内存中生成的图像[或任何文件],你可以使用Response.BinaryWrite()来流式传输字节数组,或者直接在Response.OutputStream.中写入输出

编辑:

微软的MSDN网站有一个关于文件下载的详细解释。它包括Java和.Net应用程序的示例,概念相同:

  1. 得到回应
  2. 回复:
    1. 将内容类型设置为"APPLICATION/OCTET-STREAM"(这意味着没有打开文件的应用程序)
    2. 将标题设置为"Content Disposition","attachment;filename=''"++"''"
    3. 将文件内容写入响应中
  3. 关闭响应

因此,查看MSDN ASP.Net文件下载,您缺少2.3步骤。您只是将文件名写入响应中。

// transfer the file byte-by-byte to the response object
System.IO.FileInfo fileToDownload = new
    System.IO.FileInfo("C:''downloadJSP''DownloadConv''myFile.txt");
Response.Flush();
Response.WriteFile(fileToDownload.FullName);

在这个例子中,您将成功下载您的文件,当然,如果您可以毫无问题地获得文件:)。

编辑2:

用于下载任何文件的HTML组件必须是常规的HTML请求。任何下载文件的ajax请求都不起作用。微软在这里对此进行了解释。主要报价:

通过javascript在下载前后附加事件是不可能的。出于安全原因,浏览器不允许此类事件。

您需要在文件附件头之前发送此消息:

Response.ContentType = "application/vnd.ms-excel"

请参阅:将数据从失败的经典ASP 导出到excel文件

尝试添加这样的HTTP头

Content-Type: application/force-download
Content-Type: application/vnd.ms-excel
Content-Type: application/download