Pergunta

Aqui é o meu 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);
    }

Ele está sendo enviada para a partir deste método 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");

        }

    }

Mas quando o método encodeAndSave corridas, nenhum arquivo é salvo para o servidor ...

Alguém sabe como dizer se o método SaveImage tem ainda correu? Além disso, quando eu digito: http://www.mysite.com/Home/SaveImage na barra de endereços que diz " O recurso não pode ser encontrado".

Alguém tem alguma idéia de por que ele estaria fazendo isso ou o que eu posso fazer para tentar descobrir isso?

Se você precisar de mais informações, por favor me avise e eu vou atualizar a minha pergunta.

Obrigado,
Matt

Foi útil?

Solução

Eu tinha um [muito] de problemas com isso e eu usei isso no 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);

Eu não tenho certeza se isso é o que você está procurando, mas como eu disse eu tenho um monte de problemas permitindo que meus usuários fazer upload de uma foto de si mesmos no meu web site.

Basicamente, eu tenho uma visão que contém um campo de "arquivo" tipo sobre ele e um botão "Enviar" para o evento posto de volta.

Em seguida, no controlador eu tenho a seguinte;

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

A dificuldade que eu tive foi recebendo o controlador para obter o pedido juntamente com o nome do arquivo e caminho. Uma vez eu tive que eu poderia converter o arquivo para um array de bytes que eu poderia, então, salvar em um banco de dados SQL e um campo de imagem.

A única coisa mais importante que estava faltando era o método formulário na Vista que precisa ler

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

O enctype permite que você pegar o nome do arquivo e caminho do arquivo selecionado e para o controlador para ser capaz de agarrar a inputstream. Sem ele eu descobri que tanto Request.Files estava vazio ou que só continha o nome do arquivo e, portanto, não poderia abri-lo.

Depois de salvar a imagem para o seu banco de dados, exibi-lo é um doddle.

Espero que isso responde sua pergunta.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top