NuGet.MultipartWebRequest.CreateMultipartRequest C# (CSharp) Method

CreateMultipartRequest() public method

public CreateMultipartRequest ( WebRequest request ) : void
request System.Net.WebRequest
return void
        public void CreateMultipartRequest(WebRequest request)
        {
            string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x", CultureInfo.InvariantCulture);
            request.ContentType = "multipart/form-data; boundary=" + boundary;

            byte[] byteContent;
            using (var memoryStream = new MemoryStream())
            {

                foreach (var item in _formData)
                {
                    string header = String.Format(CultureInfo.InvariantCulture, FormDataTemplate, boundary, item.Key, item.Value);
                    byte[] headerBytes = Encoding.UTF8.GetBytes(header);
                    memoryStream.Write(headerBytes, 0, headerBytes.Length);

                }

                byte[] newlineBytes = Encoding.UTF8.GetBytes("\r\n");
                foreach (var file in _files)
                {
                    string header = String.Format(CultureInfo.InvariantCulture, FileTemplate, boundary, file.FieldName, file.FieldName, file.ContentType);
                    byte[] headerBytes = Encoding.UTF8.GetBytes(header);
                    memoryStream.Write(headerBytes, 0, headerBytes.Length);
                    using (Stream fileStream = file.FileFactory())
                    {
                        fileStream.CopyTo(memoryStream);
                    }
                    memoryStream.Write(newlineBytes, 0, newlineBytes.Length);
                }
                string trailer = String.Format(CultureInfo.InvariantCulture, "--{0}--", boundary);
                byte[] trailerBytes = Encoding.UTF8.GetBytes(trailer);
                memoryStream.Write(trailerBytes, 0, trailerBytes.Length);

                byteContent = memoryStream.ToArray();
            }
            request.ContentLength = byteContent.Length;
            using (Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(byteContent, 0, (int)byteContent.Length);
            }
        }

Usage Example

Example #1
0
        /// <summary>
        /// Pushes a package to the server that is represented by the stream.
        /// </summary>
        /// <param name="apiKey">API key to be used to push the package.</param>
        /// <param name="packageStreamFactory">A delegate which can be used to open a stream for the package file.</param>
        /// <param name="timeout">Time in milliseconds to timeout the server request.</param>
        public void PushPackage(string apiKey, Func <Stream> packageStreamFactory, int timeout)
        {
            HttpClient client = GetClient("", "PUT", "application/octet-stream");

            client.SendingRequest += (sender, e) =>
            {
                var request = (HttpWebRequest)e.Request;

                // Set the timeout
                if (timeout <= 0)
                {
                    timeout = request.ReadWriteTimeout; // Default to 5 minutes if the value is invalid.
                }

                request.Timeout          = timeout;
                request.ReadWriteTimeout = timeout;
                if (!String.IsNullOrEmpty(apiKey))
                {
                    request.Headers.Add(ApiKeyHeader, apiKey);
                }

                var multiPartRequest = new MultipartWebRequest();
                multiPartRequest.AddFile(packageStreamFactory, "package");

                multiPartRequest.CreateMultipartRequest(request);
            };

            EnsureSuccessfulResponse(client, HttpStatusCode.Created);
        }
All Usage Examples Of NuGet.MultipartWebRequest::CreateMultipartRequest