.NET 提供了許多上傳檔案的方法,在Windows Form應用程式中,我們可以使用WebClient類來實現。WebClient類也有兩個方法可以上傳,UploadFile和OpenWrite方法,下面就是一個實際的例子,兩種方法都有代碼: 結果如下: C#代碼如下: using System;<br />using System.Drawing;<br />using System.Collections;<br />using System.ComponentModel;<br />using System.Windows.Forms;<br />using System.Net;<br />using System.Text;<br />using System.IO;</p><p>namespace UploadFile<br />{<br /> public class Form1 : System.Windows.Forms.Form<br /> {<br /> private System.Windows.Forms.Label label1;<br /> private System.Windows.Forms.Label label2;<br /> private System.Windows.Forms.Button button1;<br /> private System.Windows.Forms.Label label3;<br /> private System.Windows.Forms.Button button2;<br /> private System.Windows.Forms.TextBox txtFileName;<br /> private System.Windows.Forms.TextBox txtServerPath;<br /> private System.Windows.Forms.LinkLabel linkLabel1;</p><p> private System.ComponentModel.Container components = null;</p><p> public Form1()<br /> {<br /> InitializeComponent();<br /> }<br /> protected override void Dispose( bool disposing )<br /> {<br /> if( disposing )<br /> {<br /> if (components != null)<br /> {<br /> components.Dispose();<br /> }<br /> }<br /> base.Dispose( disposing );<br /> }</p><p> #region Windows Form Designer generated code<br /> private void InitializeComponent()<br /> {<br /> System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));<br /> this.label1 = new System.Windows.Forms.Label();<br /> this.txtServerPath = new System.Windows.Forms.TextBox();<br /> this.label2 = new System.Windows.Forms.Label();<br /> this.button1 = new System.Windows.Forms.Button();<br /> this.txtFileName = new System.Windows.Forms.TextBox();<br /> this.label3 = new System.Windows.Forms.Label();<br /> this.button2 = new System.Windows.Forms.Button();<br /> this.linkLabel1 = new System.Windows.Forms.LinkLabel();<br /> this.SuspendLayout();<br /> //<br /> // label1<br /> //<br /> this.label1.ForeColor = System.Drawing.Color.Red;<br /> this.label1.Location = new System.Drawing.Point(8, 96);<br /> this.label1.Name = "label1";<br /> this.label1.Size = new System.Drawing.Size(448, 16);<br /> this.label1.TabIndex = 0;<br /> this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;<br /> //<br /> // txtServerPath<br /> //<br /> this.txtServerPath.Location = new System.Drawing.Point(128, 8);<br /> this.txtServerPath.Name = "txtServerPath";<br /> this.txtServerPath.Size = new System.Drawing.Size(320, 21);<br /> this.txtServerPath.TabIndex = 1;<br /> this.txtServerPath.Text = "http://mengxianhui/aspxWeb/Images/";<br /> //<br /> // label2<br /> //<br /> this.label2.AutoSize = true;<br /> this.label2.Font = new System.Drawing.Font("宋體", 9F, System.Drawing.FontStyle.Bold,<br /> System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));<br /> this.label2.ForeColor = System.Drawing.Color.Navy;<br /> this.label2.Location = new System.Drawing.Point(8, 12);<br /> this.label2.Name = "label2";<br /> this.label2.Size = new System.Drawing.Size(116, 17);<br /> this.label2.TabIndex = 2;<br /> this.label2.Text = "請輸入伺服器位址:";<br /> this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;<br /> //<br /> // button1<br /> //<br /> this.button1.Location = new System.Drawing.Point(192, 64);<br /> this.button1.Name = "button1";<br /> this.button1.TabIndex = 3;<br /> this.button1.Text = "上傳檔案";<br /> this.button1.Click += new System.EventHandler(this.button1_Click);<br /> this.button1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.button1_MouseDown);<br /> //<br /> // txtFileName<br /> //<br /> this.txtFileName.Location = new System.Drawing.Point(128, 32);<br /> this.txtFileName.Name = "txtFileName";<br /> this.txtFileName.Size = new System.Drawing.Size(232, 21);<br /> this.txtFileName.TabIndex = 4;<br /> this.txtFileName.Text = "";<br /> //<br /> // label3<br /> //<br /> this.label3.AutoSize = true;<br /> this.label3.Font = new System.Drawing.Font("宋體", 9F, System.Drawing.FontStyle.Bold,<br /> System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));<br /> this.label3.ForeColor = System.Drawing.Color.DarkBlue;<br /> this.label3.Location = new System.Drawing.Point(8, 38);<br /> this.label3.Name = "label3";<br /> this.label3.Size = new System.Drawing.Size(116, 17);<br /> this.label3.TabIndex = 5;<br /> this.label3.Text = "請輸入上傳檔案名稱:";<br /> this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;<br /> //<br /> // button2<br /> //<br /> this.button2.Location = new System.Drawing.Point(370, 32);<br /> this.button2.Name = "button2";<br /> this.button2.Size = new System.Drawing.Size(80, 23);<br /> this.button2.TabIndex = 6;<br /> this.button2.Text = "瀏覽檔案…";<br /> this.button2.Click += new System.EventHandler(this.button2_Click);<br /> //<br /> // linkLabel1<br /> //<br /> this.linkLabel1.Location = new System.Drawing.Point(16, 120);<br /> this.linkLabel1.Name = "linkLabel1";<br /> this.linkLabel1.Size = new System.Drawing.Size(440, 24);<br /> this.linkLabel1.TabIndex = 7;<br /> this.linkLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;<br /> this.linkLabel1.LinkClicked += new<br /> System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);<br /> //<br /> // Form1<br /> //<br /> this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);<br /> this.BackColor = System.Drawing.SystemColors.Control;<br /> this.ClientSize = new System.Drawing.Size(464, 157);<br /> this.Controls.Add(this.linkLabel1);<br /> this.Controls.Add(this.button2);<br /> this.Controls.Add(this.txtFileName);<br /> this.Controls.Add(this.label3);<br /> this.Controls.Add(this.txtServerPath);<br /> this.Controls.Add(this.label2);<br /> this.Controls.Add(this.button1);<br /> this.Controls.Add(this.label1);<br /> this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));<br /> this.Name = "Form1";<br /> this.Text = "WebClient 上傳檔案的例子";<br /> this.Resize += new System.EventHandler(this.Form1_Resize);<br /> this.ResumeLayout(false);</p><p> }<br /> #endregion<br /> [STAThread]<br /> static void Main()<br /> {<br /> Application.Run(new Form1());<br /> }</p><p> ///<br /><summary> /// .NET SDK 上面的開啟檔案的類<br /> /// </summary><p> private FileStream OpenFile()<br /> {<br /> OpenFileDialog dlgOpenFile = new OpenFileDialog();<br /> dlgOpenFile.ShowReadOnly = true;</p><p> if(dlgOpenFile.ShowDialog() == DialogResult.OK)<br /> {<br /> if(dlgOpenFile.ReadOnlyChecked == true)<br /> {<br /> return (FileStream)dlgOpenFile.OpenFile();</p><p> }<br /> else<br /> {<br /> string path = dlgOpenFile.FileName;<br /> return new FileStream(path, System.IO.FileMode.Open,<br /> System.IO.FileAccess.ReadWrite);<br /> }<br /> }<br /> return null;<br /> }</p><p> private void button2_Click(object sender, System.EventArgs e)<br /> {<br /> OpenFileDialog dlgOpenFile = new OpenFileDialog();<br /> dlgOpenFile.InitialDirectory = @"C:/";<br /> dlgOpenFile.ShowReadOnly = false;<br /> dlgOpenFile.ReadOnlyChecked = true;<br /> dlgOpenFile.Filter = "所有檔案 (*.*)|*.*";<br /> if(dlgOpenFile.ShowDialog() == DialogResult.OK)<br /> {<br /> if(dlgOpenFile.ReadOnlyChecked == true)<br /> {<br /> txtFileName.Text = dlgOpenFile.FileName.ToString();<br /> }<br /> }<br /> }</p><p> private void button1_Click(object sender, System.EventArgs e)<br /> {<br /> // 需要注意的是:txtServerPath檔案夾有匿名可寫的許可權。<br /> // 可以自己定義新檔案名稱字<br /> if(txtFileName.Text.Trim() == "" || txtServerPath.Text.Trim() == "")<br /> {<br /> MessageBox.Show("請輸入你要上傳的檔案名稱字!","錯誤:", MessageBoxButtons.OK,<br /> MessageBoxIcon.Information);<br /> }<br /> else<br /> {<br /> /// 得到檔案名稱,副檔名字,伺服器路徑<br /> string fileNamePath = txtFileName.Text.Trim();<br /> string uriString = txtServerPath.Text.Trim();<br /> string fileName = fileNamePath.Substring(fileNamePath.LastIndexOf("//") + 1);<br /> string fileNameExt = fileName.Substring(fileName.LastIndexOf(".") + 1);<br /> if(uriString.EndsWith("/") == false) uriString = uriString + "/";</p><p> uriString = uriString + fileName;<br /> /// 建立WebClient執行個體<br /> WebClient myWebClient = new WebClient();<br /> myWebClient.Credentials = CredentialCache.DefaultCredentials;</p><p> // 要上傳的檔案<br /> FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);<br /> //FileStream fs = OpenFile();<br /> BinaryReader r = new BinaryReader(fs);<br /> try<br /> {<br /> //使用UploadFile方法可以用下面的格式<br /> //myWebClient.UploadFile(uriString,"PUT",fileNamePath);<br /> byte[] postArray = r.ReadBytes((int)fs.Length);<br /> Stream postStream = myWebClient.OpenWrite(uriString,"PUT");<br /> if(postStream.CanWrite)<br /> {<br /> postStream.Write(postArray,0,postArray.Length);<br /> label1.Text = fileName + "上傳成功!";<br /> }<br /> else<br /> {<br /> label1.Text = "檔案目前不可寫!";<br /> }<br /> postStream.Close();<br /> linkLabel1.Text = "查看上傳的檔案";<br /> for(int i = linkLabel1.Links.Count - 1;i>-1;i--)<br /> linkLabel1.Links.Remove(linkLabel1.Links[i]);<br /> linkLabel1.Links.Add(0,linkLabel1.Text.Length,uriString);<br /> }<br /> catch(WebException errMsg)<br /> {<br /> label1.Text="上傳失敗:" + errMsg.Message;<br /> }<br /> }<br /> }</p><p> private void linkLabel1_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e)<br /> {<br /> this.WindowState = FormWindowState.Minimized;<br /> this.linkLabel1.Links[linkLabel1.Links.IndexOf(e.Link)].Visited = true;<br /> string target = e.Link.LinkData as string;<br /> if(null != target)<br /> {<br /> System.Diagnostics.Process.Start(target);<br /> }<br /> else<br /> {<br /> MessageBox.Show("請用瀏覽器訪問:" + target);<br /> }<br /> }</p><p> private void Form1_Resize(object sender, System.EventArgs e)<br /> {<br /> if(this.WindowState == FormWindowState.Maximized) this.WindowState = FormWindowState.Normal;<br /> }</p><p> private void button1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)<br /> {<br /> if(txtFileName.Text.Trim() != "" && txtServerPath.Text.Trim() != "")<br /> label1.Text = "正在上傳檔案,請稍侯……!";<br /> }<br /> }<br />}<br /> |