[Mono-bugs] [Bug 418012] New: WebClient.UploadFile = 500 internal	server error
    bugzilla_noreply at novell.com 
    bugzilla_noreply at novell.com
       
    Mon Aug 18 10:05:49 EDT 2008
    
    
  
https://bugzilla.novell.com/show_bug.cgi?id=418012
           Summary: WebClient.UploadFile = 500 internal server error
           Product: Mono: Class Libraries
           Version: SVN
          Platform: i686
        OS/Version: Linux
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: System
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: surfzoid2002 at yahoo.fr
         QAContact: mono-bugs at lists.ximian.com
          Found By: DeveloperNet
Hi, i'm writing MonoOSC, i use WebClient.UploadFile to upload new files in
OpenSuse build service.
I cannot really provide test case, so you need a valid Novell account and start
a project/pkg at https://build.opensuse.org/
After use this two function , first is really basic and second is a modified
version of the mono class WebClient.UploadFile :
//VarGlobal.OpenSuseApiUrl is : "https://api.opensuse.org/"
//PkgName is "MonoOSC"
//example of FuncAndArgs : "source/home:surfzoid/" + PkgName +
"/MyShortFileName.file"
using System;
using System.Collections.Generic;
using System.Text;
// We use the HttpUtility class from the System.Web namespace  
using System.Web;
using System.Net;
using System.IO;
using System.Diagnostics;
using System.Threading;
using System.Globalization;
        static public void Putit(string FuncAndArgs, string User, string
Password, string SourceFile)
        {
                        try {
                                Uri DestFile = new Uri(VarGlobal.OpenSuseApiUrl
+ FuncAndArgs);
                WebClient request = new WebClient();
                //parametre de connexion
                request.Credentials = new NetworkCredential(User, Password);
                request.UploadFile(DestFile, "PUT", SourceFile);
                        } catch (Exception Ex) {
                                Console.WriteLine(Ex.Message +
Environment.NewLine + Ex.StackTrace);
                        }
                }
                static public byte [] UploadFileCore (string FuncAndArgs,
string User, string Password, string SourceFile)
                {
                        Console.WriteLine("UploadFileCore");
                        try {
                Uri address = new Uri(VarGlobal.OpenSuseApiUrl + FuncAndArgs);
                // Create the web request  
                WebRequest request = WebRequest.Create(address) as WebRequest;
                // Add authentication to request  
                request.Credentials = new NetworkCredential(User, Password);
                request.Timeout = VarGlobal.TimeOut;
                // Set type to PUT  
                request.Method = "PUT";
                string boundary = "---------------------" +
DateTime.Now.Ticks.ToString("x", NumberFormatInfo.InvariantInfo);
                string contentType = "multipart/form-data";
                string formHeader = "--" + boundary + "\r\n"
                                + "Content-Disposition: form-data;
name=\"file\"; filename=\"" + Path.GetFileName(SourceFile) + "\"\r\n"
                                + "Content-Type: " + contentType + "\r\n"
                                + "\r\n";
                byte[] formHeaderBytes = Encoding.UTF8.GetBytes(formHeader);
                byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" +
boundary + "--\r\n");
                WebHeaderCollection Headers = new WebHeaderCollection();
                        string fileCType = Headers ["Content-Type"];
                        if (fileCType != null) {
                                string lower = fileCType.ToLower ();
                                if (lower.StartsWith ("multipart/"))
                                        throw new WebException ("Content-Type
cannot be set to a multipart" +
                                                                " type for this
request.");
                        } else {
                                fileCType = "application/octet-stream";
                        }
                        Stream reqStream = null;
                        Stream fStream = null;
                        byte [] resultBytes = null;
                        SourceFile = Path.GetFullPath (SourceFile);
                        try {
                                fStream = File.OpenRead (SourceFile);
                                reqStream = request.GetRequestStream ();
                reqStream.Write(boundaryBytes, 0, boundaryBytes.Length);
                reqStream.Write(formHeaderBytes, 0, formHeaderBytes.Length);
                                int nread;
                                byte [] buffer = new byte [4096];
                                while ((nread = fStream.Read (buffer, 0, 4096))
!= 0)
                                        reqStream.Write (buffer, 0, nread);
                                reqStream.Close ();
                                reqStream = null;
                                WebResponse response = request.GetResponse ();
                StreamReader reader = new
StreamReader(response.GetResponseStream());
                resultBytes =
Encoding.UTF8.GetBytes(reader.ReadToEnd().ToString());
            }
            catch (ThreadInterruptedException Tex)
            {
                Console.WriteLine(Tex.Message + Environment.NewLine +
Tex.StackTrace);
                                if (request != null)
                                        request.Abort ();
                                throw;
                        } finally {
                                if (fStream != null)
                                        fStream.Close ();
                                if (reqStream != null)
                                        reqStream.Close ();
                        }
                        return resultBytes;
                        } catch (Exception Ex) {
                                Console.WriteLine(Ex.Message +
Environment.NewLine + Ex.StackTrace);
                        }
                        return null;
                }
-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.
    
    
More information about the mono-bugs
mailing list