服务器是否可以使用来自客户端的文件而无需将其上传到服务器? ASP.NET

时间:2013-05-17 08:56:18

标签: c# asp.net upload client-side server-side

我想知道,目前,客户端将文件上传到服务器上的目录,然后服务器可以使用该文件(csv文件)来更新SQL数据库。

这是服务器使用该文件的唯一方法吗?首先要将它上传到服务器?或者你可以使用该文件而不将其上传到服务器的目录吗?

(使用visual studio 2012,C#和asp.net)

代码更新---

asp上传文件。 (我知道代码可以更清晰,写得更好,但我的测试代码永远不干净)                     

                //Uplod file to the server
                FileUpload1.SaveAs(serverUploadDir + FileUpload1.FileName);

                //Use the Uploaded File to update the sql table
                dbConn.UploadCSVToSql(serverUploadDir + FileUpload1.FileName);

UploadCSVToSql

  public void UploadCSVToSql(string filepath)
        {
            //string filepath = "C:\\Copy of ABI Employee List.csv";
            StreamReader sr = new StreamReader(filepath);
            string line = sr.ReadLine();
            string[] value = line.Split(',');
            DataTable dt = new DataTable();
            DataRow row;
            foreach (string dc in value)
            {
                dt.Columns.Add(new DataColumn(dc));
            }

            while (!sr.EndOfStream)
            {
                value = sr.ReadLine().Split(',');
                if (value.Length == dt.Columns.Count)
                {
                    row = dt.NewRow();
                    row.ItemArray = value;
                    dt.Rows.Add(row);
                }
            }
            SqlBulkCopy bc = new SqlBulkCopy(conn.ConnectionString, SqlBulkCopyOptions.TableLock);
            bc.DestinationTableName = "MainDump";
            bc.BatchSize = dt.Rows.Count;
            conn.Open();
            bc.WriteToServer(dt);
            bc.Close();
            conn.Close();

2 个答案:

答案 0 :(得分:4)

我没有看到如何在不上传文件的情况下从客户端获取文件到服务器,但是您不需要将文件存储到文件夹中。如果您使用

    <asp:FileUpload ID="fuMyUpload" runat="server" /> 

控制。您可以在流中获取数据并将其存储在内存中。

    if (!fuMyUpload.HasFile)
    {
         lblWarning.Text = "No file Selected";
         return;
    }

    var csvData = Encoding.UTF8.GetString(fuCircuitCsv.FileBytes);

    using (var reader = new StringReader(csvData))
    {
          var headers = reader.ReadLine().Split(',');
          while ((line = reader.ReadLine()) != null)
          {
                 var fields = line.Split(',');
          }
    }

答案 1 :(得分:0)

如果您在监视任何CSV文件的文件夹的服务器上运行后台作业,则需要将其上载到服务器。如果不是这种情况,那么您应该能够仅使用C#处理文件并执行数据库更新。