protected UploadResult SendRequestFileRange(string url, Stream data, string fileName, long contentPosition = 0, long contentLength = -1, Dictionary <string, string> args = null, NameValueCollection headers = null, CookieCollection cookies = null, HttpMethod method = HttpMethod.PUT) { UploadResult result = new UploadResult(); IsUploading = true; StopUploadRequested = false; try { url = URLHelpers.CreateQueryString(url, args); if (contentLength == -1) { contentLength = data.Length; } contentLength = Math.Min(contentLength, data.Length - contentPosition); string contentType = RequestHelpers.GetMimeType(fileName); if (headers == null) { headers = new NameValueCollection(); } long startByte = contentPosition; long endByte = startByte + contentLength - 1; long dataLength = data.Length; headers.Add("Content-Range", $"bytes {startByte}-{endByte}/{dataLength}"); HttpWebRequest request = CreateWebRequest(method, url, headers, cookies, contentType, contentLength); using (Stream requestStream = request.GetRequestStream()) { if (!TransferData(data, requestStream, contentPosition, contentLength)) { return(null); } } using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { result.Response = ProcessWebResponseText(response); } result.IsSuccess = true; } catch (Exception e) { if (!StopUploadRequested) { string response = ProcessError(e, url); if (ReturnResponseOnError && e is WebException) { result.Response = response; } } } finally { currentWebRequest = null; IsUploading = false; } return(result); }
protected UploadResult SendRequestFile(string url, Stream data, string fileName, string fileFormName, Dictionary <string, string> args = null, NameValueCollection headers = null, CookieCollection cookies = null, HttpMethod method = HttpMethod.POST, string contentType = RequestHelpers.ContentTypeMultipartFormData, string relatedData = null) { UploadResult result = new UploadResult(); IsUploading = true; StopUploadRequested = false; try { string boundary = RequestHelpers.CreateBoundary(); contentType += "; boundary=" + boundary; byte[] bytesArguments = RequestHelpers.MakeInputContent(boundary, args, false); byte[] bytesDataOpen; if (relatedData != null) { bytesDataOpen = RequestHelpers.MakeRelatedFileInputContentOpen(boundary, "application/json; charset=UTF-8", relatedData, fileName); } else { bytesDataOpen = RequestHelpers.MakeFileInputContentOpen(boundary, fileFormName, fileName); } byte[] bytesDataClose = RequestHelpers.MakeFileInputContentClose(boundary); long contentLength = bytesArguments.Length + bytesDataOpen.Length + data.Length + bytesDataClose.Length; HttpWebRequest request = CreateWebRequest(method, url, headers, cookies, contentType, contentLength); using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(bytesArguments, 0, bytesArguments.Length); requestStream.Write(bytesDataOpen, 0, bytesDataOpen.Length); if (!TransferData(data, requestStream)) { return(null); } requestStream.Write(bytesDataClose, 0, bytesDataClose.Length); } using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { result.Response = ProcessWebResponseText(response); } result.IsSuccess = true; } catch (Exception e) { if (!StopUploadRequested) { string response = ProcessError(e, url); if (ReturnResponseOnError && e is WebException) { result.Response = response; } } } finally { currentWebRequest = null; IsUploading = false; } return(result); }