利用WebClient类向服务器上载文件(C#)
- 作者:xiaoxiao
- 发表时间:2020-12-23 10:35
- 来源:未知
作者:孟宪会 出自:【孟宪会之精彩世界】 发布日期:2003年7月30日 5点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 code private 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 = "浏览文件&#8230;"; 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 += new System.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()); } /// <summary> /// .NET SDK 上面的打开文件的类 /// </summary> 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 = "正在上传文件,请稍侯&#8230;&#8230;!"; } } } |