How to recover an angled base64 image on the server

0

I have an application where the user chooses an image and saves it as

base64 in the database. The problem is when I return the image it is not loaded correctly.

Controller:

angular.module("modaFeminina").controller("ProdutoController", function ($scope, $http, $base64) {

$scope.produto = {};

$scope.submeter = function () {

    $scope.produto.Imagem = $base64.encode($scope.produto.Imagem);

    $http.post("/Produto/Salvar", $scope.produto).success(function () {

    }).error(function () {

    });
}
    $scope.Listar = function() {
        $http.get("/Produto/ListarPorId/1", $scope.produto.Id).success(function (produto) {
            $scope.produto = produto;
            $scope.produto.Imagem = $base64.decode(produto.Imagem);
        }).error(function () {

        });
    }

});

View

<div class="row">
    <div class="col s12 ">
        <h4>Cadastrar Produto</h4>
    </div>
    <form class="" name="formulario">
        <div class="col s8">
            <div class="row">
                <div class="input-field col s6 m6 l6">
                    <i class="material-icons prefix">local_offer</i>
                    <input id="inputProduto" type="text" class="validate" name="Produto" ng-model="produto.NomeProduto">
                    <label for="inputProduto">Produto</label>
                </div>
                <div class="input-field col s6 m6 l6">
                    <i class="material-icons prefix">store</i>
                    <input id="inputLoja" type="text" class="validate" name="Loja" ng-model="produto.Loja">
                    <label for="inputLoja">Loja</label>
                </div>
            </div>
            <div class="row">
                <div class="input-field col s12 m12 l12">
                    <i class="material-icons prefix">local_offer</i>
                    <textarea id="textareaDescricao" class="materialize-textarea" ng-model="produto.Descricao"></textarea>
                    <label for="textareaDescricao">Descrição</label>
                </div>
            </div>
            <div class="row">
                <div class="input-field col s6 m6 l6">
                    <i class="material-icons prefix">local_offer</i>
                    <input id="inputMarca" type="text" class="validate" name="Marca" ng-model="produto.Marca">
                    <label for="inputMarca">Marca</label>
                </div>
                <div class="input-field col s6 m6 l6">
                    <i class="material-icons prefix">loyalty</i>
                    <input id="inputTipo" type="text" class="validate" name="Tipo" ng-model="produto.Tipo">
                    <label for="inputTipo">Tipo</label>
                </div>
            </div>
            <div class="row">
                <div class="input-field col s4 m4 l4">
                    <i class="material-icons prefix">local_offer</i>
                    <input id="inputQuantidade" type="number" class="validate" name="Quantidade" ng-model="produto.Quantidade">
                    <label for="inputQuantidade">Quantidade</label>
                </div>
                <div class="input-field col s4 m4 l4">
                    <i class="material-icons prefix">monetization_on</i>
                    <input id="inputValorPago" type="text" class="validate" name="ValorPago" ng-model="produto.ValorPago">
                    <label for="inputValorPago">Valor Pago</label>
                </div>
                <div class="input-field col s4 m4 l4">
                    <i class="material-icons prefix">monetization_on</i>
                    <input id="inputValorUnitario" type="text" class="validate" name="ValorUnitario" ng-model="produto.ValorUnitario">
                    <label for="inputValorUnitario">Valor Unitário</label>
                </div>
            </div>
            <div class="row">
                <div class="file-field input-field">
                    <div class="btn">
                        <span>File</span>
                        <input type="file">
                    </div>
                    <div class="file-path-wrapper">
                        <input class="file-path validate" type="text" ng-model="produto.Imagem">
                    </div>
                </div>
            </div>
        </div>
        <div class="col s4">
            <div class="card small">
                <div class="card-image waves-effect waves-block waves-light">
                    <img class="activator" data-ng-src="{{produto.Imagem}}">
                </div>
                <div class="card-content">
                    <span class="card-title activator grey-text text-darken-4">{{produto.NomeProduto}}<i class="material-icons right">more_vert</i></span>
                </div>
                <div class="card-reveal">
                    <span class="card-title grey-text text-darken-4">{{produto.NomeProduto}}<i class="material-icons right">close</i></span>
                    <p>{{produto.Descricao}}</p>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="col s6 m6 l6">
                <button class="btn waves-effect waves-light" type="submit" ng-click="submeter()" onclick="Materialize.toast('Produto salvo com sucesso!', 4000)" name="action">
                    Salvar
                    <i class="material-icons right">send</i>
                </button>
                <a href="#" class="btn waves-effect waves-light" ng-click="Listar()">
                    Voltar
                    <i class="material-icons right">undo</i>
                </a>
            </div>
        </div>
    </form>
</div>
    
asked by anonymous 07.07.2016 / 06:52

1 answer

0

The problem is that the image, when encoded for base64, has a prefix before the string that serves as metadata in the following format:

"date: mimetype; base64, characters" where:

"date: mimetype" corresponds to the image type, eg "data: image / png", "data: image / jpeg", etc. "base64, characters" matches the string of characters you cited in your example, but prefixed with "base64,"

With this, your example would look like this (if it was a jpg image):

"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QBaRXhpZgAATU0AKgAAAAgABQMBAAU..."

Note that after "base64" we put a comma, not a colon.

Test this using this site where you upload an image and it gives you the respective string already in base64 format .

    
07.12.2017 / 00:14