zoukankan      html  css  js  c++  java
  • C# Http以文件的形式上传文件

    以下的是上传的方法:

    // <summary> 
            /// 将本地文件上传到指定的服务器(HttpWebRequest方法) 
            /// </summary> 
            /// <param name="address">文件上传到的服务器</param> 
            /// <param name="fileNamePath">要上传的本地文件(全路径)</param> 
            /// <param name="saveName">文件上传后的名称</param> 
            /// <param name="progressBar">上传进度条</param> 
            /// <returns>成功返回1,失败返回0</returns> 
            private int Upload_Request(string address, string fileNamePath, string saveName, ProgressBar progressBar)
            {
                int returnValue = 0;
    
                // 要上传的文件 
                FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);
                BinaryReader r = new BinaryReader(fs);
    
                //时间戳 
                string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");
                byte[] boundaryBytes = Encoding.ASCII.GetBytes("
    --" + strBoundary + "
    ");
    
                //请求头部信息 
                StringBuilder sb = new StringBuilder();
                sb.Append("--");
                sb.Append(strBoundary);
                sb.Append("
    ");
                sb.Append("Content-Disposition: form-data; name="");
                sb.Append("file");
                sb.Append(""; filename="");
                sb.Append(saveName);
                sb.Append(""");
                sb.Append("
    ");
                sb.Append("Content-Type: ");
                sb.Append("application/octet-stream");
                sb.Append("
    ");
                sb.Append("
    ");
                string strPostHeader = sb.ToString();
                byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);
    
                // 根据uri创建HttpWebRequest对象 
                HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(address));
                httpReq.Method = "POST";
    
                //对发送的数据不使用缓存 
                httpReq.AllowWriteStreamBuffering = false;
    
                //设置获得响应的超时时间(300秒) 
                httpReq.Timeout = 300000;
                httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary;
                long length = fs.Length + postHeaderBytes.Length + boundaryBytes.Length;
                long fileLength = fs.Length;
                httpReq.ContentLength = length;
                try
                {
                    progressBar.Maximum = int.MaxValue;
                    progressBar.Minimum = 0;
                    progressBar.Value = 0;
    
                    //每次上传4k 
                    int bufferLength = 4096;
                    byte[] buffer = new byte[bufferLength];
    
                    //已上传的字节数 
                    long offset = 0;
    
                    //开始上传时间 
                    DateTime startTime = DateTime.Now;
                    int size = r.Read(buffer, 0, bufferLength);
                    Stream postStream = httpReq.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;
                        lblTime.Text = "已用时:" + second.ToString("F2") + "秒";
                        if (second > 0.001)
                        {
                            lblSpeed.Text = " 平均速度:" + (offset / 1024 / second).ToString("0.00") + "KB/秒";
                        }
                        else
                        {
                            lblSpeed.Text = " 正在连接…";
                        }
                        lblState.Text = "已上传:" + (offset * 100.0 / length).ToString("F2") + "%";
                        lblSize.Text = (offset / 1048576.0).ToString("F2") + "M/" + (fileLength / 1048576.0).ToString("F2") + "M";
                        Application.DoEvents();
                        size = r.Read(buffer, 0, bufferLength);
                    }
                    //添加尾部的时间戳 
                    postStream.Write(boundaryBytes, 0, boundaryBytes.Length);
                    postStream.Close();
    
                    //获取服务器端的响应 
                    WebResponse webRespon = httpReq.GetResponse();
                    Stream s = webRespon.GetResponseStream();
                    StreamReader sr = new StreamReader(s);
    
                    //读取服务器端返回的消息 
                    String sReturnString = sr.ReadLine();
                    s.Close();
                    sr.Close();
                    if (sReturnString == "Success")
                    {
                        returnValue = 1;
                    }
                    else if (sReturnString == "Error")
                    {
                        returnValue = 0;
                    }
    
                }
                catch(Exception ex)
                {
                    returnValue = 0;
                }
                finally
                {
                    fs.Close();
                    r.Close();
                }
    
                return returnValue;
            }
  • 相关阅读:
    or具体点vc
    异常 中断 实现
    int 0x80 系统调用实现
    方便查看 linux/kernel/sched.c
    第五周课堂笔记1th
    第四周课堂笔记4th
    第四周课堂笔记3th
    第四周课堂笔记2th
    第四周课堂笔记1th
    第三周课堂笔记4thand5th
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3306460.html
Copyright © 2011-2022 走看看