2009-06-28 4 views
1
Aufruf

Hier ist meine Methodehaben Schwierigkeiten einen Controller-POST-Methode

[AcceptVerbs(HttpVerbs.Post)] 
    public void SaveImage(FormCollection formValues) 
    { 
     byte[] contents = Convert.FromBase64String(Request.Form["file"]); 
     System.IO.File.WriteAllBytes(Server.MapPath(Request.Form["name"]), contents); 
    } 

Es ist aus diesem Actionscript-Methode geschrieben zu werden:

public function encodeAndSave(e:MouseEvent = null):void 
    { 
     var date:Date = new Date(); 
     var by:ByteArray = PNGEnc.encode(canvas.main_bdata); 
     var req:URLRequest = new URLRequest(server_path+"Home/SaveImage"); 
     var params:URLVariables = new URLVariables(); 
     params.file = Base64.encodeByteArray(by); 
     params.name = "MyImage.png"; 
     req.method = URLRequestMethod.POST; 
     req.data = params; 
     var ldr:URLLoader = new URLLoader(req); 

     ldr.addEventListener(Event.COMPLETE, complete); 

     ldr.load(req); 

     function complete(e:Event):void 
     { 
      navigateToURL(new URLRequest("?" + Math.random()), "_self"); 

     } 

    } 

Aber wenn die encodeAndSave Methode ausgeführt wird, wird keine Datei auf die gespeicherte Server ...

Kann jemand sagen, ob die SaveImage-Methode sogar ausgeführt wurde? Auch wenn ich in die Adresszeile tippe: , heißt es "Die Ressource kann nicht gefunden werden".

Jeder hat irgendwelche Ideen, warum es das tun würde oder was ich tun kann, um es herauszufinden?

Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen und ich werde meine Frage aktualisieren.

Danke,
Matt

Antwort

7

Ich hatte ein [Los] Probleme mit diesem und ich verwenden, um diese am Ende;

Ansicht:

<% using (Html.BeginForm("PhotoAdd", "Photos", FormMethod.Post, new { enctype = "multipart/form-data" })) { %> 

<input type="file" id="file" name="file" class="field" style="width:300px;"/> 

<%} %> 

-Controller:

var file = Request.Files["file"]; 
byte[] buf = new byte[file.ContentLength]; 
file.InputStream.Read(buf, 0, file.ContentLength); 

Ich bin nicht sicher, ob dies ist, was Sie suchen, aber wie ich sagte, ich eine Menge Probleme haben erlaubt Meine Nutzer laden ein Foto von sich auf meine Website hoch.

Grundsätzlich habe ich eine View, die ein Feld vom Typ "Datei" enthält und eine "Submit" -Schaltfläche für das Post-Back-Ereignis.

Dann in der Steuerung habe ich folgendes;

Die Schwierigkeit, in die ich lief, war, dass der Controller die Anfrage zusammen mit dem Dateinamen und dem Pfad erhielt. Sobald ich das hatte, konnte ich die Datei in ein Array von Bytes konvertieren, die ich dann in einer SQL-Datenbank und einem Bildfeld speichern konnte.

Das ein größtes, was ich die Form Methode in der Ansicht fehlte, war die

<% using (Html.BeginForm("PhotoAdd", "Photos", FormMethod.Post, new { enctype = "multipart/form-data" })) { %> 

Die enctype lesen muss ermöglicht es Ihnen, die Dateinamen und den Pfad der ausgewählten Datei zu holen und für den Controller zu sein in der Lage, den Eingangsstrom zu greifen. Ohne es zu finden, fand ich, dass entweder Request.Files leer war oder dass es nur den Dateinamen enthielt und daher nicht geöffnet werden konnte.

Sobald Sie das Bild in Ihrer Datenbank gespeichert haben, ist die Anzeige ein Kinderspiel.

Ich hoffe, dies beantwortet Ihre Frage.

+0

Kannst du etwas erklären?Sorry, es sieht nicht wie etwas aus, das nur ein Plug-and-Play wäre, also möchte ich einfach herausfinden, wie es funktioniert, also kann ich es ein wenig für meine Web-App ändern – Matt

+1

Ich würde hinzufügen, ich konnte hinzufügen "HttpPostedFileBase Datei "in die Parameterliste meines Controllers, und das erlaubt mir, den gesamten" Request.Files "-Abschnitt zu überspringen, da die Datei bereits mit den hochgeladenen Daten geladen ist. –

Verwandte Themen