2009-06-28 4 views
1

Voici ma méthodeennuis Avoir l'appel d'une méthode Post Controller

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

Il s'affiché à partir de cette méthode 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"); 

     } 

    } 

Mais lorsque la méthode encodeAndSave fonctionne, aucun fichier est enregistré à la serveur ...

Est-ce que quelqu'un sait comment dire si la méthode SaveImage a même couru? En outre, quand je tape: http://www.mysite.com/Home/SaveImage dans la barre d'adresse, il est dit "La ressource est introuvable".

Quelqu'un a-t-il une idée de ce que cela ferait ou de ce que je pourrais faire pour essayer de le comprendre?

Si vous avez besoin de plus d'informations s'il vous plaît faites le moi savoir et je vais mettre à jour ma question.

Merci,
Matt

Répondre

7

moi avons eu un [beaucoup] de problèmes avec cela et j'ai utilisé cela à la fin;

Voir:

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

Je ne suis pas sûr que ce soit ce que vous cherchez, mais comme je l'ai dit que j'ai beaucoup de problèmes permettant mes utilisateurs de télécharger une photo d'eux-mêmes dans mon site Web.

Fondamentalement, j'ai une vue qui contient un champ de type "fichier" sur celui-ci et un bouton "Envoyer" pour l'événement de retour.

Puis dans le contrôleur j'ai ce qui suit; La difficulté que j'ai rencontrée a été de faire en sorte que le contrôleur reçoive la requête avec le nom et le chemin du fichier. Une fois que j'ai eu que je pourrais convertir le fichier en un tableau d'octets que je pourrais alors enregistrer dans une base de données SQL et un champ Image.

La seule chose la plus importante que je manquais était la méthode du formulaire dans la vue qui doit lire

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

Le enctype vous permet de choisir le nom et le chemin du fichier sélectionné et pour le contrôleur à capable de saisir l'inputtream. Sans cela, j'ai trouvé que Request.Files était vide ou qu'il ne contenait que le nom du fichier et ne pouvait donc pas l'ouvrir.

Une fois que vous avez enregistré l'image dans votre base de données, l'afficher est une image.

J'espère que cela répond à votre question.

+0

pouvez-vous expliquer un peu?Désolé, il ne ressemble pas à quelque chose qui serait juste un plug and play, donc je veux juste comprendre comment cela fonctionne, donc je peux le changer un peu pour mon application web – Matt

+1

Je voudrais ajouter, j'ai été en mesure d'ajouter "HttpPostedFileBase file "à la liste des paramètres de mon contrôleur, et cela me permet d'ignorer toute la section" Request.Files "comme un fichier déjà chargé avec les données téléchargées. –

Questions connexes