解决方案 »

  1.   

    服务器端 我在iis 虚拟目录下放了一个aspx文件  他们说是要发布 我也不太清楚怎么弄
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;namespace _3DFramework.FunctionModules
    {
        public partial class UC_upload : DevComponents.DotNetBar.Metro.MetroAppForm
        {
            protected void UC_upload(object sender, EventArgs e)
            {
                if (Request.Files.Count > 0)
                {
                    try
                    {
                        HttpPostedFile file = Request.Files[0];
                        string filePath = this.MapPath("UploadDocument") + "//" + file.FileName;
                        file.SaveAs(filePath);
                        Response.Write("Success/r/n");
                    }
                    catch
                    {
                        Response.Write("Error/r/n");
                    }
                }
            }
        }
    }
      

  2.   

    本地弄了一个上传方法/// 将本地文件上传到指定的服务器(HttpWebRequest方法)
            /// </summary>
            /// <param name="address">文件上传到的服务器</param> address:接收文件的URL地址:http://192.168.16.135:80/AnGeoDatas/UC_upload.aspx
            /// <param name="fileNamePath">要上传的本地文件(全路径)</param> fileNamePath:要上传的本地文件,如:D:\\\\\\\test.rar
            /// <param name="saveName">文件上传后的名称</param> saveName:文件上传到服务器后的名称,如:200901011234.rar
            /// <param name="progressBar">上传进度条</param>
            /// <returns>成功返回1,失败返回0</returns>
            //*
     private int Upload_Request(string address, string fileNamePath, string saveName, ProgressBar progressBar)
            {
                int returnValue = 0;
                // 要上传的文件
                FileStream fileStream = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);
                BinaryReader binaryReader = new BinaryReader(fileStream);            //时间戳
                string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");
                byte[] boundaryBytes = Encoding.ASCII.GetBytes("/r/n--" + strBoundary + "/r/n");            //请求头部信息
                StringBuilder sb = new StringBuilder();
                sb.Append("--");
                sb.Append(strBoundary);
                sb.Append("/r/n");
                sb.Append("Content-Disposition: form-data; name=\"");
                sb.Append("file");
                sb.Append("\"; filename=\"");
                sb.Append(saveName);
                sb.Append("\"");
                sb.Append("/r/n");
                sb.Append("Content-Type: ");
                sb.Append("application/octet-stream");
                sb.Append("/r/n");
                sb.Append("/r/n");
                string strPostHeader = sb.ToString();
                byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);            // 根据uri创建HttpWebRequest对象
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(address));
                request.Method = "POST";            //对发送的数据不使用缓存
                request.AllowWriteStreamBuffering = false;            //设置获得响应的超时时间(300秒)
                request.Timeout = 30000;
                request.ContentType = "multipart/form-data; boundary=" + strBoundary;
                long length = fileStream.Length + postHeaderBytes.Length + boundaryBytes.Length;
                long fileLength = fileStream.Length;
                request.ContentLength = length;            try
                {
                    progressBar.Maximum = int.MaxValue;
                    progressBar.Minimum = 0;
                    progressBar.Value = 0;
                    progressBar.Step = 1;                //每次上传4k
                    int bufferLength = 4096;
                    byte[] buffer = new byte[bufferLength];                //已上传的字节数
                    long offset = 0;                //开始上传时间
                    DateTime startTime = DateTime.Now;
                    int size = binaryReader.Read(buffer, 0, bufferLength);
                    Stream postStream = request.GetRequestStream();                //发送请求头部消息
                    postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
                    while (size > 0)
                    {
                        postStream.Write(buffer, 0, size);
                        offset += size;
                        progressBar.Value = (int)(offset * (int.MaxValue / length));
                        TimeSpan span = DateTime.Now - startTime;
                        double second = span.TotalSeconds;
                        //scSpeed.Text = "已用时:" + second.ToString("F2") + "秒";
                        //if (second > 0.001)
                        //{
                        //    scSpeed.Text = " 平均速度:" + (offset / 1024 / second).ToString("0.00") + "KB/秒";
                        //}
                        //else
                        //{
                        //    scSpeed.Text = " 正在连接…";
                        //}
                        //scSche.Text = "已上传:" + (offset * 100.0 / length).ToString("F2") + "%";
                        //scSche.Text += (offset / 1048576.0).ToString("F2") + "M/" + (fileLength / 1048576.0).ToString("F2") + "M";
                        //Application.DoEvents();
                        size = binaryReader.Read(buffer, 0, bufferLength);
                        if ((offset / 1048576.0).ToString("F2") == (fileLength / 1048576.0).ToString("F2") || 
                            (offset / 1048576.0).ToString("F2").Equals((fileLength / 1048576.0).ToString("F2")))
                        {
                            MessageBox.Show("完成?");
                        }
                    }
                    //添加尾部的时间戳
                    postStream.Write(boundaryBytes, 0, boundaryBytes.Length);
                    postStream.Close();                //获取服务器端的响应
                    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                    request.ContentType = "text/html";
                    Stream stream = response.GetResponseStream();
                    StreamReader streamReader = new StreamReader(stream);
                    MessageBox.Show("是的!完成!");
                    //读取服务器端返回的消息
                    String sReturnString = streamReader.ReadLine();
                    stream.Close();
                    streamReader.Close();
                    if (sReturnString == "Success")
                    {
                        returnValue = 1;
                    }
                    else if (sReturnString == "Error")
                    {
                        returnValue = 0;
                    }            }
                catch
                {
                    returnValue = 0;
                }
                finally
                {
                    fileStream.Close();
                    binaryReader.Close();
                }
                return returnValue;        }