2017-05-01 1 views
0

Ich habe einen Dienst, der der Datei einige Eigenschaften hinzufügt und sie in einer Antwort als Bytearray zurücksendet, aber ich habe es schwer, sie als Bytes anzuzeigen, ich habe versucht, sie zu konvertieren zu Base64, aber es hat immer noch nicht funktioniert. Es zeigt rohe BytesAngularJS Bild von Byte-Array als Antwort gesendet

PNG

IHDR & LCvIDATx ......

Was wäre beste Lösung sein, dies zu lösen, vielleicht sollte ich Antwort ändern Typ ist es möglich, keine Bytes zu senden?

@RequestMapping(path = "image/decode", method = POST, consumes = "multipart/form-data", produces = {"image/png", "image/jpeg"}) 
public byte[] decodeImage(@RequestParam("file") MultipartFile file) throws Exception { 
    File file1 = addProperties(file); 
    return FileUtils.readFileToByteArray(file1); 
} 

Js Code

$scope.extractImage = function (sourceFile) { 
    Upload.upload({ 
     url: '/image/decode', 
     objectKey: '', 
     data: { 
      file: sourceFile 
     } 
    }).then(function (response) { 
     console.log('Success ' +'Response: ' + response); 
     $scope.image = response.data; 
    }, function (response) { 
     console.log('Error status: ' + response); 
    }); 
}; 

Html-Code

<img class="thumb image-properties" ng-if="image" ng-src="{{image}}" /> 
+0

Versuchen Sie es zu einem Datum uri Umwandlung: 'data: image/png; base64, ' – Riiverside

+1

Mögliches Duplikat von [Javascript: Wie man Bilder aus Byte-Arrays mit Javascript oder Servlet anzeigt?] (http://stackoverflow.com/questions/20756042/javascript -How-to-Display- image-from-byte-array-using-javascript-or-servlet) –

+0

Eigentlich wäre ein besseres Duplikat: http://stackoverflow.com/questions/14979791/angularjs-show-byte-array-content-as-image –

Antwort

0

sicherlich bereits Sie die Lösung finden. wenn nicht

var bytes = response.data; 
    var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(bytes))); 
    $scope.image = "data:image/png;base64," + base64String; 

für andere Menschen mit dem gleichen Problem, dieses Problem hat eine viel einfachere Lösung:

@GetMapping(path = "image/decode/{img}", produces = {"image/png", "image/jpeg"}) 
public byte[] decodeImage(@PathVariable String img) throws Exception { 
    // return your file's bytes 
} 

und in JS:

$scope.extractImage = function (sourceFile) { 
    $scope.image = `/image/decode/$sourceFile`; 
}; 
Verwandte Themen