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);
}
}