1

我有一个流程,允许用户下载电子表格,进行一些更改,然后上传这些更改。

上传方法看起来像 -

    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 服务器上不存在。

有没有人尝试过通过网络上传文件以及如何解决文件位置问题?

4

2 回答 2

0

您可以使用 Server.MapPath 来获取应用程序的虚拟位置。看看这篇文章。

于 2013-11-14T13:08:09.380 回答
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

于 2013-11-14T13:09:20.340 回答