none
Salvar imagem com webservice RRS feed

  • Pergunta

  • Ola a todos..

    Eu já tenho um webservice para o qual eu passo um imagem (Base64) e ele salva no meu servidor. Até aqui ele está funcionando perfeitamente.

    Na minha tela tem esse código :

    function salvar() {
            var dados = {};

            //Utilizar o toDataURL para converter em Base64
            var base64 = document.getElementById("myCanvas").toDataURL("image/png");

            dados.base64 = base64.substr(base64.indexOf(',') + 1, base64.length);

            var WPath = "face1";

            $.ajax({
                type: 'POST',
                //Chamar o webmethod SalvarImagem em webservice.asmx
                url: "SalvarImagem.asmx/SalvarImagemX",
                contentType: 'application/json; charset=utf-8',
                dataType: 'json',
                data: '{"base64":"' + dados + '","WPath":"' + WPath + '"}',
                success: function (data) {
                    alert(data.d);
                }
                , error: function (xmlHttpRequest, status, err) {
                    alert("Ocorreu o seguinte erro:" + xmlHttpRequest.responseText)
                }
            });
        }

    E o meu webservice está assim :

    public class SalvarImagem : System.Web.Services.WebService { [WebMethod] public string SalvarImagemX(string base64, string WPath) { //MemoryStream com o base64 recebido por parâmetro using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(base64))) { //Criar um novo Bitmap baseado na MemoryStream using (Bitmap bmp = new Bitmap(ms)) { //Local onde vamos salvar a imagem (raiz do site + /canvas.png) //string path = Server.MapPath("/" + WPath + "/canvas.png"); string path = Server.MapPath("/face2/canvas.png"); //Salvar a imagem no formato PNG bmp.Save(path, ImageFormat.Png); } } return "Imagem foi salva com sucesso"; } } }

    Meu problemas está que : Como eu disse ele funciona enquanto eu passo somente um paramentro que é

    a string DADOS. Mas eu preciso passar também outra string que contem a pasta onde deve ser gravado

    a imagem...

    Quando eu coloquei segundo parâmetro (WPath) eu passei a receber a mensagem de erro abaixo...

    Alguem sabe me dizer o que tem de errado ....??

    Ocorreu o seguinte erro:{"Message":"The input is not a valid Base-64 string as it contains a

    non-base 64 character, more than two padding characters, or an illegal character among the padding

    characters.

    Grato pela Ajuda

    Eduardo



    • Editado E.Gameiro segunda-feira, 17 de abril de 2017 19:43
    segunda-feira, 17 de abril de 2017 19:41

Respostas

  • Ola Daniel.. obrigado pela ajuda...

    Fiz a alteração que você sugeriu e pelo menos mudou o tipo do erro, agora está dando essa mensagem abaixo..

    erro

    Você tem idéia do que possa ser...??

    Abs,

    Eduardo

      Nunca vi, mas acredito ser do web service tente fazer assim conforme essa solução pesquisada:

    data: JSON.stringify({'base64': dados,'WPath': WPath}),
     Teste poste os resultados...

    quinta-feira, 20 de abril de 2017 18:10

Todas as Respostas

  • Bom dia,

    Verifique se as aspas estão corretas nesta linha:

    data: '{"base64":"' + dados + '","WPath":"' + WPath + '"}',

    Atenciosamente,


    Robson William Silva

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    terça-feira, 18 de abril de 2017 15:08
    Moderador
  • tente fazer 2 testes..
    1) no endereço da pasta, veja se funciona pondo \\ entre os niveis de pastas do suposto caminho onde deve ser gravada a imagem.

    string d = "c:\\teste\\";

    2) veja se funciona utilizar um @ antes da string com o endereço.

    string teste = @"c:\teste\";

    quarta-feira, 19 de abril de 2017 17:20
  • Ola Jose... Obrigado pela ajuda, mas o erro não tem relação com o endereço da pasta, o erro tem relação com a string que estou passando ("The input is not a valid Base-64 string") ou seja aparentemente a string não está no formato valido..

    Abs,

    Eduardo

    quinta-feira, 20 de abril de 2017 17:00
  • Ola Jose... Obrigado pela ajuda, mas o erro não tem relação com o endereço da pasta, o erro tem relação com a string que estou passando ("The input is not a valid Base-64 string") ou seja aparentemente a string não está no formato valido..

    Abs,

    Eduardo

    Boa tarde,

     Faça assim:

    data: '{"base64": dados,"WPath": WPath}',
      Teste poste os resultados.

    quinta-feira, 20 de abril de 2017 17:09
  • Ola Daniel.. obrigado pela ajuda...

    Fiz a alteração que você sugeriu e pelo menos mudou o tipo do erro, agora está dando essa mensagem abaixo..

    erro

    Você tem idéia do que possa ser...??

    Abs,

    Eduardo

    • Editado E.Gameiro quinta-feira, 20 de abril de 2017 17:38
    quinta-feira, 20 de abril de 2017 17:37
  • Ola Daniel.. obrigado pela ajuda...

    Fiz a alteração que você sugeriu e pelo menos mudou o tipo do erro, agora está dando essa mensagem abaixo..

    erro

    Você tem idéia do que possa ser...??

    Abs,

    Eduardo

      Nunca vi, mas acredito ser do web service tente fazer assim conforme essa solução pesquisada:

    data: JSON.stringify({'base64': dados,'WPath': WPath}),
     Teste poste os resultados...

    quinta-feira, 20 de abril de 2017 18:10
  • Provavelmente está se perdendo com as \\. na classe do webservice, veja como esse parâmetro está chegando. Coloque um breakpoint e olhe o json que está chegando.
    segunda-feira, 24 de abril de 2017 21:28