以前是写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); } } } }
慢慢理解就会明白很多了!多学习吧!