C#文件上传

1.先把对应文件的流取到,传对应路径和接口

public HttpWebResponse PutFile(string url, string fileName, byte[] buffer, HttpHeaders headers)
        {
            System.GC.Collect();
            var request = WebRequest.Create(GetUri(url)) as HttpWebRequest;
            if (headers != null)
                request.Headers = headers;
            request.Method = WebRequestMethods.Http.Put;
            return SendFile(request, fileName, buffer);
        }


private void SetRequestConfig(HttpWebRequest request)
        {
            request.PreAuthenticate = true;
            //NetworkCredential myCred = new NetworkCredential("user", "1234", "abc");
            //request.Credentials = myCred;

            request.Credentials = CredentialCache.DefaultCredentials;
            request.Timeout = httpConfig.ResponseTimeout;
            request.ReadWriteTimeout = httpConfig.ReadWriteTimeout;
            request.UserAgent = VersionInfoUtils.DefaultUserAgent;
            request.KeepAlive = false;
            request.ProtocolVersion = HttpVersion.Version10;
        }



 public virtual HttpWebResponse SendFile(HttpWebRequest request, string fileName, byte[] buffer)
        {
            try
            {
                SetRequestConfig(request);
                string boundary = string.Format("----WebKitFormBoundary{0}", DateTime.Now.Ticks.ToString("x"));//分隔符, 随机字符串或者使用 GlobalConfig.MakeShortGuid();
                byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
                request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);

                var requestStream = request.GetRequestStream();
                //头部
                requestStream.Write(boundarybytes, 0, boundarybytes.Length);

                string headerTemplate = "--" + boundary + "\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n";
                var contentType = MimeMapping.GetMimeMapping(fileName);
                string header = string.Format(headerTemplate, "file", fileName, contentType);
                byte[] headerbytes = System.Text.Encoding.ASCII.GetBytes(header);
                requestStream.Write(headerbytes, 0, headerbytes.Length);

                //文件流
                requestStream.Write(buffer, 0, buffer.Length);

                //尾部
                byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
                requestStream.Write(trailer, 0, trailer.Length);
                requestStream.Close();

                var response = request.GetResponse() as HttpWebResponse;
                if (response.StatusCode >= (HttpStatusCode)300)
                    throw new PitServerSDKException(response.StatusDescription,
                        Enum.GetName(typeof(HttpStatusCode), response.StatusCode));
                return response;
            }
            catch (WebException webEx)
            {
                throw new PitServerSDKException(webEx.Message);
            }
            catch (Exception e)
            {
                throw new PitServerSDKException(e.Message);
            }
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值