¿Como convertir una imagen a base64 en ASP.NET MVC?

Tengo un WS que recibe los siguientes datos:

    <token>string</token>
    <NroComputacion>string</NroComputacion>
    <NroCarnet>string</NroCarnet>
    <Foto>string</Foto>
    <Firma>string</Firma>
    <Emision>dateTime</Emision>
    <Vencimiento>dateTime</Vencimiento>
    <ObservacionesCarnet>string</ObservacionesCarnet>

El problema es que la foto y la firma a la hora de cargar son una imagen, que se tiene que convertir a base64 y a un string para que se realice la llamada de forma correcta, y no se como hacer la conversion o como pasar los datos.

por ahora este es mi Models:

     public class CarnetViewModels
{
    public class CarnetNuevo
    {
        public string Computacion { get; set; }

        public string NroCarnet { get; set; }

        public HttpPostedFileBase Foto { get; set; }

        public HttpPostedFileBase Firma { get; set; }

        [DataType(DataType.Date)]
        public DateTime Emision { get; set; }

        [DataType(DataType.Date)]
        public DateTime Vencimiento { get; set; }
        public string Observaciones { get; set; }

    }


}

Este mi controller

    [HttpPost]
    public ActionResult Nuevo(Models.CarnetViewModels.CarnetNuevo carnet)
    {

        var token = Session["token"] as string;
        //27662956

        SRCarnets.CarnetsSoapClient wsCarnet = new SRCarnets.CarnetsSoapClient();
        SRCarnets.RespuestaSimple outCrear = new SRCarnets.RespuestaSimple();
        outCrear =  wsCarnet.CrearCarnet(token, "27662956", carnet.NroCarnet, carnet.Foto, carnet.Firma, carnet.Emision, carnet.Vencimiento, carnet.Observaciones);
        return View();
    }

y mi View:

     <form name="nuevoCarnet" accept-charset="utf-8" action="@Url.Action("Nuevo", "Carnet")" method="POST" >
    <div class="parent">
        <img src="~/img/carnet-frente.png" class="bg" />
        <table class="overlay">
            <tr>
                <td width="30%">
                    <div width="50%">
                        @Html.TextBoxFor(m => m.Foto, new { type = "file" })
                    </div>
                </td>
                <td width="70%" rowspan="2">
                    <table width="100%" class="presentacionCarnet">
                        <tr>
                            <th width="25%">Carnet N&deg;</th>
                            <td>@Html.EditorFor(m => m.NroCarnet, null)</td>
                        </tr>
                        <tr>
                            <th>Licencia N&deg;</th>
                        </tr>
                        <tr>
                            <th>Apellido</th>
                        </tr>
                        <tr>
                            <th>Nombre</th>
                        </tr>
                        <tr>
                            <th>C.I. N&deg;</th>
                        </tr>
                        <tr>
                            <th>Fecha de Nac</th>

                        </tr>
                        <tr>
                            <th>Nacionalidad</th>
                        </tr>
                        <tr>
                            <th>Municipalidad</th>
                        </tr>
                        <tr>
                            <th>Domicilio</th>
                        </tr>
                        <tr>
                            <th>Fecha de Emisión</th>
                            <td> @Html.EditorFor(m => m.Emision, null)</td>
                        </tr>
                        <tr>
                            <th>Fecha de Vencimiento</th>
                            <td> @Html.EditorFor(m => m.Vencimiento, null)</td>
                        </tr>
                        <tr>
                            <th valign="top">Observaciones</th>
                            <td>@Html.EditorFor(m => m.Observaciones, null)</td>
                        </tr>
                    </table>
            </tr>
            <tr>
                <td>
                    @Html.TextBoxFor(m => m.Firma, new { type = "file"})
                </td>
            </tr>
            <tr>
                <td></td>
                <td>
                    <br />
                    <input class="btn btn-primary" type="submit" value="Generar Carnet" />
                    <a href="javascript:history.go(-1);" class="btn btn-danger"><i class="glyphicon glyphicon-remove"></i> Cancelar</a>
                </td>
            </tr>
        </table>
    </div>
</form> 
1
задан 26.10.2016, 22:06
4 ответа

Ты это можешь работать tambiГ©n в front-end следующего способа:

function leerArchivo() {
  if (this.files && this.files[0]) {
    var FR= new FileReader();
    FR.onload = function(e) {
      document.getElementById("imgNinja").value = e.target.result;
      console.log(e.target.result);
    };       
    FR.readAsDataURL( this.files[0] );
  }
}
document.getElementById("inp").addEventListener("change", leerArchivo, false);
<input id="inp" type='file'>
<input type="hidden" id="imgNinja">

И в server, читать стоимость imgNinja, который уже находится в Base64

1
ответ дан 24.11.2019, 12:53
  • 1
    но в вышедшем в свет коде видно, что услуга это призывает с controller в .net, именно там он нуждается в изображении в base64, файл зазнается как file в сервер – Leandro Tuttini 26.10.2016, 21:59
  • 2
    понятный! я жду, что tambi и # 233; n идея была поймана автором вопроса. Спасибо Леандро! – fredyfx 26.10.2016, 22:02
  • 3
    Utilize твой ответ, так как она была самой легкой для того, чтобы быть примененным, большое спасибо – Sebastian Kullman 26.10.2016, 23:38

Ты был бы должен получать байт [] с HttpPostedFileBase

byte[] data;
using (Stream inputStream = model.File.InputStream)
{
    MemoryStream memoryStream = inputStream as MemoryStream;
    if (memoryStream == null)
    {
        memoryStream = new MemoryStream();
        inputStream.CopyTo(memoryStream);
    }
    data = memoryStream.ToArray();
}

Шрифт Конверт Ттппостедфилебасе to байт []

Распределяя байт [] convert

Convert. ToBase64String (MГ©todo) (Байт [])

ты получаешь string encodeado в base64, это тот, которого ты посылаешь в услугу

1
ответ дан 24.11.2019, 12:53
  • 1
    хорошие и # 241; or leandro, только я скажу, что я новый в этом, и что мне сложно понимать это, что он исходит из моего кода, он был бы должен меняться и как? – Sebastian Kullman 26.10.2016, 22:26
  • 2
    ты должен менять твой action, перед тем, как призывать CrearCarnet () ты должен convetir propeidades Подпиши и Фотография применяясь то, что я комментирую, ты конвертируешь в байт [] и оттуда в string aplciando convert – Leandro Tuttini 26.10.2016, 22:30

Ты мог бы добавлять свойство FirmaBase64 к твоему классу:

public class CarnetNuevo
{
    public string Computacion { get; set; }

    public string NroCarnet { get; set; }

    public HttpPostedFileBase Foto { get; set; }

    public HttpPostedFileBase Firma { get; set; }

    [DataType(DataType.Date)]
    public DateTime Emision { get; set; }

    [DataType(DataType.Date)]
    public DateTime Vencimiento { get; set; }
    public string Observaciones { get; set; }

    public string FirmaBase64 { get {
        if (Firma == null)
             return null;
        byte[] bytes = new byte[Firma.InputStream.Length];
        Firma.InputStream.Read(bytes, 0, byte.Length - 1)
        return Convert.ToBase64String(bytes);
    }
}

В этом классе podés консультировать стоимость свойства FirmaBase64 и будет возвращать тебе то, что necesitás. Удачи!

0
ответ дан 24.11.2019, 12:53

Это resolvГ - благодаря ответу fredyfx

я у Себя остаюсь таким код:

в моем View издал неудар в лунку file таково:

    <div>
         <input id="imp" type='file' class="file" multiple data-show-upload="false" data-show-remove="false" data-show-caption="true"> 
          @Html.TextBoxFor(m => m.Foto, new { type = "hidden" })
   </div>

   <div>
        <input id="inp" type='file' class="file" multiple data-show-upload="false" data-show-caption="true"> 
        @Html.TextBoxFor(m => m.Firma, new { type = "hidden" })

неудар в лунку, который верит обоснованно это в скрытый акцент, и этой функцией javascript я наполняю

    function leerArchivofoto() {
        if (this.files && this.files[0]) {
            var FR1 = new FileReader();
            FR1.onload = function (e) {
                document.getElementById("Foto").value = e.target.result;
            };
            FR1.readAsDataURL(this.files[0]);
        }
    }
    document.getElementById("imp").addEventListener("change", leerArchivofoto, false);

    function leerArchivofirma() {
        if (this.files && this.files[0]) {
            var FR2 = new FileReader();
            FR2.onload = function (e) {
                document.getElementById("Firma").value = e.target.result;
            };
            FR2.readAsDataURL(this.files[0]);
        }
    }
    document.getElementById("inp").addEventListener("change", leerArchivofirma, false);

Измените признаки Фотографии и Подписи из-за string

    public class CarnetNuevo
    {
        public string Computacion { get; set; }
        [Required(ErrorMessage = "El campo Nº de Carnet no puede estar vacio")]
        public string NroCarnet { get; set; }
        [Required(ErrorMessage = "Se debe agregar una fotografia")]
        public string Foto { get; set; }
        [Required(ErrorMessage = " Se debe agregar una firma")]
        public string Firma { get; set; }

        [DataType(DataType.Date)]
        public DateTime Emision { get; set; }

        [DataType(DataType.Date)]
        public DateTime Vencimiento { get; set; }
        public string Observaciones { get; set; }
    }

и в конце концов в моем controller я сделал вызов:

    public ActionResult Nuevo(Models.CarnetViewModels.CarnetNuevo carnet)
    {
        //obtengo el token
        var token = Session["token"] as string;
        //este sera el numero de computacion = 27662956
        //instancio mi WS
        SRCarnets.CarnetsSoapClient wsCarnet = new SRCarnets.CarnetsSoapClient();
        //Instancio el output
        SRCarnets.RespuestaSimple outCrear = new SRCarnets.RespuestaSimple();
        //realizo la llamada
        outCrear =  wsCarnet.CrearCarnet(token, "27662956", carnet.NroCarnet, carnet.Foto, carnet.Firma, carnet.Emision, carnet.Vencimiento, carnet.Observaciones);
        return View();
    }
0
ответ дан 24.11.2019, 12:53

Теги

Похожие вопросы