我使用开放XML导出excel文件。 SpreadsheetDocument.Create
需要文件目的地。
我希望用户使用与SaveFileDialog
中的Winforms
类似的文件目的地。
我如何从用户获取文件目的地?我使用Asp.Net 4.0和OpenXML SDK 2.5。
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(destination, SpreadsheetDocumentType.Workbook);
答案 0 :(得分:0)
当网络服务器将文件流式传输到客户端时,您无法控制目标文件夹。你所能做的就是:
如果需要在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);