Ejemplo n.º 1
0
        private void DoUploadFile(string name, Stream data_stream,
                                  string mime_type,
                                  string [,] arguments)
        {
            string         upload_url   = GetUploadUrl(arguments);
            HttpWebRequest http_request = CreateHttpRequest(
                upload_url, "POST", true);
            MultipartRequest request =
                new MultipartRequest(http_request);

            MemoryStream mem_stream = null;

            if (null != UploadProgressChanged)
            {
                // "Manual buffering" using a MemoryStream.
                request.Request.AllowWriteStreamBuffering =
                    false;
                mem_stream           = new MemoryStream();
                request.OutputStream = mem_stream;
            }

            request.BeginPart(true);
            request.AddHeader("Content-Disposition",
                              "form-data; name=\"filename0\"; "
                              + "filename=\"" + name
                              + GetFileNameExtension(
                                  mime_type)

                              + '"',
                              false);
            request.AddHeader("Content-Type", mime_type, true);

            byte [] data_buffer = new byte [8192];
            int     read_count;

            while ((read_count = data_stream.Read(
                        data_buffer, 0, data_buffer.Length))
                   > 0)
            {
                request.WritePartialContent(
                    data_buffer, 0, read_count);
            }
            request.EndPartialContent();
            request.EndPart(true);

            if (null != UploadProgressChanged)
            {
                int total = (int)request.OutputStream.Length;
                request.Request.ContentLength = total;

                string progress_title = String.Format(
                    Catalog.GetString("Uploading "
                                      + "photo "
                                      + "\"{0}\""),
                    name);

                using (Stream request_stream = request.Request
                                               .GetRequestStream()) {
                    byte [] buffer =
                        mem_stream.GetBuffer();
                    int write_count = 0;
                    for (int offset = 0; offset < total;
                         offset += write_count)
                    {
                        FireUploadProgress(
                            progress_title,
                            offset, total);
                        write_count = System.Math.Min(
                            16384,
                            total - offset);
                        request_stream.Write(buffer,
                                             offset,
                                             write_count);
                    }
                    FireUploadProgress(progress_title,
                                       total, total);
                }
            }

            SendRequest("upload", request.Request, true);
        }
        private void DoUploadFile(string name, Stream data_stream,
		                           string mime_type,
		                           string [,] arguments)
        {
            string upload_url = GetUploadUrl (arguments);
            HttpWebRequest http_request = CreateHttpRequest (
                    upload_url, "POST", true);
            MultipartRequest request =
                    new MultipartRequest (http_request);

            MemoryStream mem_stream = null;
            if (null != UploadProgressChanged) {
                // "Manual buffering" using a MemoryStream.
                request.Request.AllowWriteStreamBuffering =
                        false;
                mem_stream = new MemoryStream ();
                request.OutputStream = mem_stream;
            }

            request.BeginPart (true);
            request.AddHeader ("Content-Disposition",
                    "form-data; name=\"filename0\"; "
                            + "filename=\"" + name
                            + GetFileNameExtension (
                                mime_type)

                            + '"',
                    false);
            request.AddHeader ("Content-Type", mime_type, true);

            byte [] data_buffer = new byte [8192];
            int read_count;
            while ((read_count = data_stream.Read (
                    data_buffer, 0, data_buffer.Length))
                            > 0) {
                request.WritePartialContent (
                        data_buffer, 0, read_count);
            }
            request.EndPartialContent ();
            request.EndPart (true);

            if (null != UploadProgressChanged) {

                int total = (int) request.OutputStream.Length;
                request.Request.ContentLength = total;

                string progress_title = String.Format (
                        Catalog.GetString ("Uploading "
                                + "photo "
                                + "\"{0}\""),
                        name);

                using (Stream request_stream = request.Request
                        .GetRequestStream ()) {
                    byte [] buffer =
                            mem_stream.GetBuffer ();
                    int write_count = 0;
                    for (int offset = 0; offset < total;
                            offset += write_count) {
                        FireUploadProgress (
                                progress_title,
                                offset, total);
                        write_count = System.Math.Min (
                                16384,
                                total - offset);
                        request_stream.Write (buffer,
                                offset,
                                write_count);
                    }
                    FireUploadProgress (progress_title,
                            total, total);
                }
            }

            SendRequest ("upload", request.Request, true);
        }