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