云计算百科
云计算领域专业知识百科平台

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

.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 = "浏览文件…";       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 = "正在上传文件,请稍侯……!";     }     } }

赞(0)
未经允许不得转载:网硕互联帮助中心 » 利用WebClient类向服务器上载文件
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!