Pregunta

Aquí está mi método

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

Se está publicando desde este método de 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");

        }

    }

Pero cuando se ejecuta el método encodeAndSave, no se guarda ningún archivo en el servidor ...

¿Alguien sabe cómo saber si el método SaveImage incluso se ha ejecutado? Además, cuando escribo: http://www.mysite.com/Home/SaveImage en la barra de direcciones que dice < !> quot; El recurso no se puede encontrar " ;.

¿Alguien tiene alguna idea de por qué estaría haciendo esto o qué puedo hacer para tratar de resolverlo?

Si necesita más información, hágamelo saber y actualizaré mi pregunta.

Gracias,
Matt

¿Fue útil?

Solución

Tuve muchos problemas con esto y lo usé al final;

Ver :

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

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

<%} %>

Controlador :

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

No estoy seguro de si esto es lo que está buscando, pero como dije, tengo muchos problemas para permitir que mis usuarios carguen una foto suya en mi sitio web.

Básicamente tengo una vista que contiene un campo de tipo " file " en él y un " Enviar " botón para el evento posterior a la publicación.

Luego en el controlador tengo lo siguiente;

    [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 dificultad que encontré fue conseguir que el controlador recibiera la solicitud junto con el nombre del archivo y la ruta. Una vez que tuve eso, pude convertir el archivo a una matriz de bytes que luego pude guardar en una base de datos SQL y un campo de imagen.

Lo que más me faltaba era el método de formulario en la vista que debe leerse

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

El enctype le permite elegir el nombre de archivo y la ruta del archivo seleccionado y que el controlador pueda tomar el flujo de entrada. Sin él, descubrí que Request.Files estaba vacío o que solo contenía el nombre del archivo y, por lo tanto, no podía abrirlo.

Una vez que haya guardado la imagen en su base de datos, mostrarla es un truco.

Espero que esto responda tu pregunta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top