我有一个流程允许用户下载电子表格,进行一些更改,然后上传这些更改。
上传方法如下 -
public DataTable ImportXLS(String SourceFilePath) {
string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + SourceFilePath + ";" +
"Extended Properties=Excel 8.0;";
using (OleDbConnection cn = new OleDbConnection(ConnectionString)) {
cn.Open();
DataTable dbSchema = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
if (dbSchema == null || dbSchema.Rows.Count < 1) {
throw new Exception("Error: Could not determine the name of the first worksheet.");
}
string WorkSheetName = dbSchema.Rows[0]["TABLE_NAME"].ToString();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + WorkSheetName + "]", cn);
DataTable dt = new DataTable(WorkSheetName);
da.Fill(dt);
return dt;
}
}
当我在本地调用该方法时,它可以工作,因为我可以看到我的本地驱动器。
部署到Web服务器时,调用类似 -
ExportImport _ei = new ExportImport();
DataTable dt = null;
dt = _ei.ImportXLS("C:\Users\mike\Desktop\mike.xls");
我收到错误“C:\ Users \ mike \ Desktop \ mike.xls”不是有效路径,显然是因为它在Web服务器上不存在。
有没有人有尝试通过网络上传文件的经验,以及如何解决文件位置问题?
答案 0 :(得分:0)
您可以使用Server.MapPath获取应用的虚拟位置。 Have a look at this article.
答案 1 :(得分:0)
您需要将FileUpload控件添加到Asp.Net页面。在按钮上单击,您需要通过调用:
来保存服务器上的文件FileUpload1.SaveAs("C:\\Uploads\\" + FileUpload1.FileName);
之后你可以叫你处理文件的方法
ExportImport _ei = new ExportImport();
DataTable dt = null;
dt = _ei.ImportXLS("C:\\Uploads\\" + FileUpload1.FileName);
所以我们的想法是在处理之前先将文件上传到服务器。
使用FileUpload控件(.Net 2.0)的链接
http://msdn.microsoft.com/en-us/library/aa479405.aspx