Problemi durante la chiamata di un metodo Post Controller
-
20-08-2019 - |
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
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.