.Net Webrequest Bild Upload Problem

mafiamix

Mitglied
Hallo,

ich bin langsam am Verzweifeln. Stundenlang versuche ich jetzt schon ein Programm fertig zu bekommen, das mir ein Bild hochladen soll.

Hier mein .NET Code:

Code:
        Dim HttpWebRequest As HttpWebRequest = HttpWebRequest.Create("http://seite.de/upload.php")

        Dim Boundary As String = "---------------------------" & DateTime.Now.Ticks.ToString

        HttpWebRequest.Credentials = CredentialCache.DefaultCredentials
        HttpWebRequest.Method = "POST"
        HttpWebRequest.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.1) Gecko/20090624 Firefox/3.5"
        HttpWebRequest.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
        HttpWebRequest.KeepAlive = "300"
        HttpWebRequest.Referer = "http://http://seite.de/"
        HttpWebRequest.CookieContainer = New CookieContainer()
        HttpWebRequest.ContentType = "multipart/form-data; boundary=" & Boundary

        'RequestStream Informationen
        Dim BoundaryBytes() As Byte = System.Text.Encoding.ASCII.GetBytes(("--" + Boundary & Environment.NewLine))
        Dim InfoBytes() As Byte = System.Text.Encoding.ASCII.GetBytes("Content-Disposition: form-data; name=""uploaded_file""; filename=""screenshot.png""" _
        & Environment.NewLine & "Content-Type: image/png" & Environment.NewLine & Environment.NewLine)
        HttpWebRequest.ContentLength = BoundaryBytes.Length & InfoBytes.Length

        Dim FileInfo As New FileInfo("screenshot2.png")
        HttpWebRequest.ContentLength += FileInfo.Length

        'RequestStream
        Dim RequestStream As Stream = HttpWebRequest.GetRequestStream

        RequestStream.Write(BoundaryBytes, 0, BoundaryBytes.Length)
        RequestStream.Write(InfoBytes, 0, InfoBytes.Length)


        Dim FileStream As FileStream = File.Open("screenshot2.png", FileMode.Open)

        Dim Buffer(1024) As Byte
        Dim BytesRead As Integer

        Do
            BytesRead = FileStream.Read(Buffer, 0, Buffer.Length)
            RequestStream.Write(Buffer, 0, BytesRead)
        Loop Until BytesRead = 0

        FileStream.Close()
        RequestStream.Close()

        'RequestStream Antwort
        Dim HttpWebResponse As HttpWebResponse = HttpWebRequest.GetResponse

        MsgBox(HttpWebResponse)

Und der php-Code:

PHP:
<?php 
ini_set ('error_reporting', E_ALL); 
$pfad = 'upload/';  
$dateiupload_erfolgreich = false; 
 
 
function CheckFilename($dateiname,$pfad) 
    { 
    global $fehler; $fehler = array(); 
    if(!in_array(strtolower(substr($dateiname,-4)),array('.jpg','.jpeg','.png','.gif','.zip','.rar','.bmp','.exe','.txt','.doc','.mp3','.wma','.wav','.html','.htm','.mpg','.avi','.pdf','.wmv','.xls','.swf','.fla','.ppt','.mov'))) array_push($fehler, 'Falsches Dateiformat! Erlaubte Dateiformate: .jpg, .jpeg, .png, .gif, .zip, .rar, .bmp, .exe, .txt, .doc, .mp3, .wma, .wav, .html, .htm, .mpg, .avi, .pdf, .wmv, .xls, .swf, .fla, .ppt, .mov'); // In das array erlaubte Dateiformate eintragen und gegebenenfals die Fehlermeldung anpassen. Bitte diese Zeile aus Sicherheitsgründen auf gar keinen Fall löschen! 
    return (sizeof($fehler)) ? false : $dateiname; 
} 
 
 
function CheckFile($dateiname_temp,$dateifehler,$dateigroesse) 
    { 
    global $fehler; $fehler = array(); 
         switch ($dateifehler) { 
    case '1': $dateifehler_erklaerung ='Die hochgeladene Datei überschreitet die in der Anweisung upload_max_filesize in php.ini festgelegte Größe.'; break; 
    case '2': $dateifehler_erklaerung = 'Die hochgeladene Datei überschreitet die in dem HTML Formular mittels der Anweisung MAX_FILE_SIZE angegebene maximale Dateigröße.'; break; 
    case '3': $dateifehler_erklaerung = 'Die Datei wurde nur teilweise hochgeladen.'; break; 
    case '4': $dateifehler_erklaerung = 'Es wurde keine Datei hochgeladen.'; break; 
    } 
    if($dateifehler) array_push($fehler, $dateifehler_erklaerung); 
    if ($dateigroesse < 1) array_push($fehler, 'Sie haben versucht keine oder eine lehre Datei hochzuladen.'); 
    return (sizeof($fehler)) ? false : $dateiname_temp; 
} 
 
 
if(!empty($_POST['Send'])) 
{ 
    if ($dateiname_temp = CheckFile($_FILES['uploaded_file']['tmp_name'],$_FILES['uploaded_file']['error'],$_FILES['uploaded_file']['size'])) 
    { 
        if ($dateiname = CheckFilename($_FILES['uploaded_file']['name'],$pfad)) 
        { 
            move_uploaded_file($dateiname_temp, $pfad.$dateiname); 
            if (filesize($pfad.$dateiname)<1) die ('Sie haben versucht eine leerer Datei hochzuladen!'); 
            $dateiupload_erfolgreich = true; 
        } 
        else $fehlermeldungen_ausgeben = true; 
    } 
    else $fehlermeldungen_ausgeben = true; 
} 
 
//else{echo"Button wurde nicht bestätigt";}
 
?> 
<html> 
<head> 
<title>Datei-Upload</title> 
</head> 
<body> 
<?php 
if ($dateiupload_erfolgreich) 
{ 
?>Ihre Datei (&quot;<?php echo $dateiname; ?>&quot;) wurde hochgeladen. Sie können nun weitere Dateien hochladen.<?php 
} 
elseif (!empty($fehler)) 
{ 
    ?> 
    <br>Es sind folgende Fehler aufgetreten:<br> 
    <?php 
    foreach ($fehler as $fehlermeldung) { 
    echo $fehlermeldung.'<br>'; 
    } 
?>Beseitigen sie wenn möglich den Fehler und versuchen sie es erneut.<?php 
} 
?>  
<form action='upload.php' enctype='multipart/form-data' method='post'> 
'<form enctype='multipart/form-data' action='upload.php' method='post'> 
    <input type='file' size='65' name='uploaded_file' id='uploaded_file'> 
    <input type='submit' value='Hochladen' name='Send'> 
</form>  
</body> 
</html>

Das php-Formular funktioniert soweit. Allerdings kommt beim Debuggen noch die Fehlermeldung im .NET Code bei
RequestStream.Close()

Die Anfrage wurde abgebrochen: Die Anfrage wurde abgebrochen..
Eine Ausnahme (erste Chance) des Typs "System.Net.WebException" ist in System.dll aufgetreten.

Kann mir jemand sagen wie ich diesen Fehler rausbekommen? Ich glaube, dann müsste alles funktionieren, oder?
 
Zuletzt bearbeitet:

ksk

Erfahrenes Mitglied
Ich kenne mich in PHP nicht aus aber es gibt mehrere Wege in ASP nach Rom.

1.) Der einfachste Weg ohne irgendwas ist der "asp:FileUploader"
http://msdn.microsoft.com/de-de/library/system.web.ui.webcontrols.fileupload(v=vs.110).aspx
Code:
protected void Button1_Click(object sender, EventArgs e)
{
  if (this.FileUpload1.HasFile)
  {
  this.FileUpload1.SaveAs("c:\\" + this.FileUpload1.FileName);
  }
}

2.) Ajax-FileUploader
http://www.ajaxf1.com/tutorial/ajax-file-upload-tutorial.html
http://www.asp.net/AjaxLibrary/AjaxControlToolkitSampleSite/AjaxFileUpload/AjaxFileUpload.aspx
http://www.dotnetfox.com/articles/a...ad-with-progress-example-in-Asp-Net-1081.aspx
http://www.openjs.com/articles/ajax/ajax_file_upload/

3.) File-Upload mittels FormData-Object
https://developer.mozilla.org/en-US/docs/Web/Guide/Using_FormData_Objects
https://developer.mozilla.org/en-US/docs/Web/API/FormData

4.) Ajax File Upload mit HTML5 und XHR2
http://www.solife.cc/blog/ajax-file-upload-formdata-xhr2.html



4.) Bisschen komplizierter ist es in jQuery, Ajax, Webservice, in diesem Sample ist mit PHP aber
man kann das genau so in HttpHandler-Webservice mit HttpContext ebenfalls realisieren
http://hayageek.com/ajax-file-upload-jquery/


Hoffe das hilft
Lg
ksk