如何获取文件路径和名称以保存此文件?

时间:2014-01-21 14:54:11

标签: c# asp.net openxml

我使用开放XML导出excel文件。 SpreadsheetDocument.Create需要文件目的地。

我希望用户使用与SaveFileDialog中的Winforms类似的文件目的地。 我如何从用户获取文件目的地?我使用Asp.Net 4.0和OpenXML SDK 2.5。

SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(destination, SpreadsheetDocumentType.Workbook);

3 个答案:

答案 0 :(得分:0)

当网络服务器将文件流式传输到客户端时,您无法控制目标文件夹。你所能做的就是:

  • 指定内容类型(以帮助客户确定如何处理)
  • 指定文件名
  • (我认为)告诉客户端浏览器保存文件与在注册的应用程序中自动显示文件(例如,PDF通常显示在浏览器中,但正确设置流式传输可能会强制执行“保存文件”对话框)

如果需要在Web服务器上“缓存”文件,则导出到服务器进程具有写入权限的服务器文件夹。然后您流式传输到客户端 - 客户端将从其浏览器获取提示并保存到他们想要的位置。

例如,查看Server.MapPath - 它会将虚拟路径映射到服务器上的物理路径。权限问题仍然存在。

根据您的具体情况,如果导出库有返回字节数组或流的方式,而不是保存到文件,则可以避免保存到服务器。在这种情况下,您只需将返回结果流式传输给请求者。

我不熟悉你正在使用的SDK,但是快速的谷歌搜索显示了这种在流中返回文档的方法:

using (MemoryStream stream = new MemoryStream())
{
    using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook, true))
    {
        ... work with the spreadsheetDocument, if needed

        ... prepare and stream to browser
    }
}

Here's我发现的SDK的一个引用

答案 1 :(得分:0)

对于此功能,即使您使用打开/保存对话框,它也会显示客户端位置而不是服务器位置。所以这里的问题是,您要将该文件保存到客户端计算机还是服务器计算机上?

如果要将其保存到客户端计算机,请先按照所需的任何名称和位置将其保存在服务器上,然后再启动下载。它将在客户端浏览器中自动提示下载对话框,用户可以选择位置和文件名(取决于客户端浏览器设置)。

如果您只想在生成电子表格之前将其保存在服务器上,请提示用户输入文件名(在生成请求的页面上)。如果用户可以访问您的某些文件夹,则还可以提示用户选择其中一个文件夹,否则请根据您的选择/要求选择一个文件夹。使用文件名和位置生成电子表格。

答案 2 :(得分:-1)

使用Environment.SpecialFolder枚举。如果您正在寻找我的文件,那么:

var destination = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(destination, SpreadsheetDocumentType.Workbook);