.net 读取客户端文件的方法

      以前是写C/S的,基本上都不用考虑程序权限的问题。现在写b/s,想程序和客户端有个交互的东东,一下子就愁坏了总是报错,没有权限!想直接操作根本就不行!最后只能放弃了。

      例如操作客户端的EXCEL文件,JAVA里有个很好的东西workbook,用来存储客户端上载的EXCEL文件(内存),不用写到硬盘上,但是有个问题就是占内存(临时性的,大文件比较明显),操作还是在服务器操作的(客户端就是没有权限)。.net的方法是先存储下来(写到硬盘上),然后再写到内存中来。

各有利弊,但是JAVA多提供了一条路!

  如果客户端程序读取的是文本文件,方法就都有了。因为上载上来的东西你可以直接从内存中读出来,也可以先存储到硬盘上,然后再读出来!

  浏览器代码:

 1 <head runat="server">
 2     <title></title>
 3 </head>
 4 <body>
 5     <form id="form1" runat="server">
 6     <div>
 7     
 8         <asp:FileUpload ID="GetUploadFileContent" runat="server" Width="190px" />
 9     <br />
10         <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
11         <br />
12         <asp:TextBox ID="TextBox1" runat="server"  TextMode="MultiLine" Height="134px"></asp:TextBox>
13     </div>
14     </form>
15 </body>
16 </html>

后台代码:

文本文件的读取提供了直接从内存读取的方法,EXCEL采用了存储到服务器再读取的方法!

using System;
using System.Collections.Generic;
//using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.OleDb;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string fileName = this.GetUploadFileContent.FileName;  //文件名
        string filePath = this.GetUploadFileContent.PostedFile.FileName; //完整路径+文件名称
        string fileType = System.IO.Path.GetExtension(fileName);


        if (fileType == ".txt")
        {
            int fileLength = this.GetUploadFileContent.PostedFile.ContentLength;
            byte[] input = new byte[fileLength];

            System.IO.Stream fileStream = this.GetUploadFileContent.PostedFile.InputStream;
            fileStream.Read(input, 0, fileLength);
            fileStream.Position = 0;
            System.IO.StreamReader sr = new System.IO.StreamReader(fileStream, System.Text.Encoding.Default);
            this.TextBox1.Text = sr.ReadToEnd();
            fileStream.Close();
            sr.Close();

        }
        if (fileType == ".xls")
        {
            string savePath = Server.MapPath("~\\upfile\\") + fileName;
            if (File.Exists(savePath))
            {
                File.Delete(savePath);
                this.GetUploadFileContent.SaveAs(savePath);
            }
            else
            {
                this.GetUploadFileContent.SaveAs(savePath);
            }

            if (File.Exists(savePath))
            {
                DataSet ds = new DataSet();
                string str = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
                 + savePath + ";Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1\"";
                OleDbConnection conn = new OleDbConnection(str);

                string strSql = "select * from [Sheet1$]";
                OleDbDataAdapter adp = new OleDbDataAdapter(strSql, conn);
                conn.Open();
                adp.Fill(ds);
                if (ds.Tables[0].Rows.Count > 0)
                {
                    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                    {
                        this.TextBox1.Text += ds.Tables[0].Rows[i][0].ToString() + "\r\n";
                    }
                }
                conn.Close();
                File.Delete(savePath);
            }
        }
    }
}

 慢慢理解就会明白很多了!多学习吧!

原文地址:https://www.cnblogs.com/allan5204/p/2497141.html