Domanda

Ecco il mio metodo

    [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);
    }

Viene pubblicato da questo metodo actionscript:

    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");

        }

    }

Ma quando viene eseguito il metodo encodeAndSave, nessun file viene salvato sul server ...

Qualcuno sa dire se il metodo SaveImage è stato persino eseguito? Inoltre, quando scrivo: http://www.mysite.com/Home/SaveImage nella barra degli indirizzi indica < !> quot; Impossibile trovare la risorsa " ;.

Qualcuno ha qualche idea sul perché sarebbe fare questo o cosa posso fare per provare a capirlo?

Se hai bisogno di ulteriori informazioni, faccelo sapere e aggiornerò la mia domanda.

Grazie,
Matt

È stato utile?

Soluzione

Ho avuto [molti] problemi con questo e alla fine l'ho usato;

Visualizza :

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

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

<%} %>

Regolatore :

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

Non sono sicuro se questo è quello che stai cercando, ma come ho detto, ho molti problemi a consentire ai miei utenti di caricare una foto di se stessi sul mio sito web.

Fondamentalmente ho una vista che contiene un campo di tipo " file " su di esso e un " Invia " per l'evento post back.

Quindi nel controller ho il seguente;

    [AcceptVerbs( HttpVerbs.Post ), Authorize]
    public ActionResult PhotoAdd(FormCollection collection)
    {
        try
        {
            var file = Request.Files["file"];

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

La difficoltà che ho incontrato è stata quella di ottenere il controller per ottenere la richiesta insieme al nome e al percorso del file. Una volta che avevo potuto convertire il file in una matrice di byte che potevo quindi salvare in un database SQL e in un campo Immagine.

L'unica cosa che mi mancava era il metodo Form nella vista che deve leggere

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

L'enctype consente di raccogliere il nome file e il percorso del file selezionato e che il controller sia in grado di afferrare l'inputstream. Senza di essa ho scoperto che Request.Files era vuoto o che conteneva solo il nome del file e quindi non poteva aprirlo.

Dopo aver salvato l'immagine nel tuo database, visualizzarla è un gioco da ragazzi.

Spero che questo risponda alla tua domanda.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top