利用WebClient类向服务器上载文件

来源:百度文库 编辑:神马文学网 时间:2024/04/29 03:50:53
作者:孟宪会 发表于:2003-07-30 17:44:10
.NET 提供了许多上载文件的方法,在Windows Form应用程序中,我们可以使用WebClient类来实现。WebClient类也有两个方法可以上载,UploadFile和OpenWrite方法,下面就是一个实际的例子,两种方法都有代码:
结果如下:

C#代码如下:
using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Net;using System.Text;using System.IO;namespace UploadFile{public class Form1 : System.Windows.Forms.Form{private System.Windows.Forms.Label label1;private System.Windows.Forms.Label label2;private System.Windows.Forms.Button button1;private System.Windows.Forms.Label label3;private System.Windows.Forms.Button button2;private System.Windows.Forms.TextBox txtFileName;private System.Windows.Forms.TextBox txtServerPath;private System.Windows.Forms.LinkLabel linkLabel1;private System.ComponentModel.Container components = null;public Form1(){InitializeComponent();}protected override void Dispose( bool disposing ){if( disposing ){if (components != null){components.Dispose();}}base.Dispose( disposing );}#region Windows Form Designer generated codeprivate void InitializeComponent(){System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));this.label1 = new System.Windows.Forms.Label();this.txtServerPath = new System.Windows.Forms.TextBox();this.label2 = new System.Windows.Forms.Label();this.button1 = new System.Windows.Forms.Button();this.txtFileName = new System.Windows.Forms.TextBox();this.label3 = new System.Windows.Forms.Label();this.button2 = new System.Windows.Forms.Button();this.linkLabel1 = new System.Windows.Forms.LinkLabel();this.SuspendLayout();//// label1//this.label1.ForeColor = System.Drawing.Color.Red;this.label1.Location = new System.Drawing.Point(8, 96);this.label1.Name = "label1";this.label1.Size = new System.Drawing.Size(448, 16);this.label1.TabIndex = 0;this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;//// txtServerPath//this.txtServerPath.Location = new System.Drawing.Point(128, 8);this.txtServerPath.Name = "txtServerPath";this.txtServerPath.Size = new System.Drawing.Size(320, 21);this.txtServerPath.TabIndex = 1;this.txtServerPath.Text = "http://mengxianhui/aspxWeb/Images/";//// label2//this.label2.AutoSize = true;this.label2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold,System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));this.label2.ForeColor = System.Drawing.Color.Navy;this.label2.Location = new System.Drawing.Point(8, 12);this.label2.Name = "label2";this.label2.Size = new System.Drawing.Size(116, 17);this.label2.TabIndex = 2;this.label2.Text = "请输入服务器地址:";this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;//// button1//this.button1.Location = new System.Drawing.Point(192, 64);this.button1.Name = "button1";this.button1.TabIndex = 3;this.button1.Text = "上载文件";this.button1.Click += new System.EventHandler(this.button1_Click);this.button1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.button1_MouseDown);//// txtFileName//this.txtFileName.Location = new System.Drawing.Point(128, 32);this.txtFileName.Name = "txtFileName";this.txtFileName.Size = new System.Drawing.Size(232, 21);this.txtFileName.TabIndex = 4;this.txtFileName.Text = "";//// label3//this.label3.AutoSize = true;this.label3.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold,System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));this.label3.ForeColor = System.Drawing.Color.DarkBlue;this.label3.Location = new System.Drawing.Point(8, 38);this.label3.Name = "label3";this.label3.Size = new System.Drawing.Size(116, 17);this.label3.TabIndex = 5;this.label3.Text = "请输入上传文件名:";this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;//// button2//this.button2.Location = new System.Drawing.Point(370, 32);this.button2.Name = "button2";this.button2.Size = new System.Drawing.Size(80, 23);this.button2.TabIndex = 6;this.button2.Text = "浏览文件…";this.button2.Click += new System.EventHandler(this.button2_Click);//// linkLabel1//this.linkLabel1.Location = new System.Drawing.Point(16, 120);this.linkLabel1.Name = "linkLabel1";this.linkLabel1.Size = new System.Drawing.Size(440, 24);this.linkLabel1.TabIndex = 7;this.linkLabel1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;this.linkLabel1.LinkClicked += newSystem.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);//// Form1//this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);this.BackColor = System.Drawing.SystemColors.Control;this.ClientSize = new System.Drawing.Size(464, 157);this.Controls.Add(this.linkLabel1);this.Controls.Add(this.button2);this.Controls.Add(this.txtFileName);this.Controls.Add(this.label3);this.Controls.Add(this.txtServerPath);this.Controls.Add(this.label2);this.Controls.Add(this.button1);this.Controls.Add(this.label1);this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));this.Name = "Form1";this.Text = "WebClient 上传文件的例子";this.Resize += new System.EventHandler(this.Form1_Resize);this.ResumeLayout(false);}#endregion[STAThread]static void Main(){Application.Run(new Form1());}/// /// .NET SDK 上面的打开文件的类/// private FileStream OpenFile(){OpenFileDialog dlgOpenFile = new OpenFileDialog();dlgOpenFile.ShowReadOnly = true;if(dlgOpenFile.ShowDialog() == DialogResult.OK){if(dlgOpenFile.ReadOnlyChecked == true){return (FileStream)dlgOpenFile.OpenFile();}else{string path = dlgOpenFile.FileName;return new FileStream(path, System.IO.FileMode.Open,System.IO.FileAccess.ReadWrite);}}return null;}private void button2_Click(object sender, System.EventArgs e){OpenFileDialog dlgOpenFile = new OpenFileDialog();dlgOpenFile.InitialDirectory = @"C:\";dlgOpenFile.ShowReadOnly = false;dlgOpenFile.ReadOnlyChecked = true;dlgOpenFile.Filter = "所有文件 (*.*)|*.*";if(dlgOpenFile.ShowDialog() == DialogResult.OK){if(dlgOpenFile.ReadOnlyChecked == true){txtFileName.Text = dlgOpenFile.FileName.ToString();}}}private void button1_Click(object sender, System.EventArgs e){// 需要注意的是:txtServerPath文件夹有匿名可写的权限。// 可以自己定义新文件名字if(txtFileName.Text.Trim() == "" || txtServerPath.Text.Trim() == ""){MessageBox.Show("请输入你要上载的文件名字!","错误:", MessageBoxButtons.OK,MessageBoxIcon.Information);}else{/// 得到文件名,文件扩展名字,服务器路径string fileNamePath = txtFileName.Text.Trim();string uriString = txtServerPath.Text.Trim();string fileName = fileNamePath.Substring(fileNamePath.LastIndexOf("\\") + 1);string fileNameExt = fileName.Substring(fileName.LastIndexOf(".") + 1);if(uriString.EndsWith("/") == false) uriString = uriString + "/";uriString = uriString + fileName;/// 创建WebClient实例WebClient myWebClient = new WebClient();myWebClient.Credentials = CredentialCache.DefaultCredentials;// 要上传的文件FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);//FileStream fs = OpenFile();BinaryReader r = new BinaryReader(fs);try{//使用UploadFile方法可以用下面的格式//myWebClient.UploadFile(uriString,"PUT",fileNamePath);byte[] postArray = r.ReadBytes((int)fs.Length);Stream postStream = myWebClient.OpenWrite(uriString,"PUT");if(postStream.CanWrite){postStream.Write(postArray,0,postArray.Length);label1.Text = fileName + "上传成功!";}else{label1.Text = "文件目前不可写!";}postStream.Close();linkLabel1.Text = "查看上载的文件";for(int i = linkLabel1.Links.Count - 1;i>-1;i--)linkLabel1.Links.Remove(linkLabel1.Links[i]);linkLabel1.Links.Add(0,linkLabel1.Text.Length,uriString);}catch(WebException errMsg){label1.Text="上传失败:" + errMsg.Message;}}}private void linkLabel1_LinkClicked(object sender, System.Windows.Forms.LinkLabelLinkClickedEventArgs e){this.WindowState = FormWindowState.Minimized;this.linkLabel1.Links[linkLabel1.Links.IndexOf(e.Link)].Visited = true;string target = e.Link.LinkData as string;if(null != target){System.Diagnostics.Process.Start(target);}else{MessageBox.Show("请用浏览器访问:" + target);}}private void Form1_Resize(object sender, System.EventArgs e){if(this.WindowState == FormWindowState.Maximized) this.WindowState = FormWindowState.Normal;}private void button1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e){if(txtFileName.Text.Trim() != "" && txtServerPath.Text.Trim() != "")label1.Text = "正在上传文件,请稍侯……!";}}}