Ich habe folgendes Problem und ich kann keine Lösung finden. Ich habe Endpunkt mit Spring Boot erstellt und wenn ich Postman verwende, erhalte ich eine Antwort mit Bild auf Körperanforderung.Herunterladen und Speichern von Dateien vom Server mit AngularJS
Aber wenn ich versuche, Datei herunterladen und auf dem Computer mit Angular und Blob und FileSaver speichern meine gespeicherte Datei kann nicht lesen.
Das ist mein Winkelregler:
vm.download = function (filename) {
console.log("Start download. File name:", filename);
$http.get('api/files/download/' + filename)
.then(function (response) {
console.log(data);
var data = new Blob([response.data], {type: 'image/jpeg;charset=UTF-8'});
FileSaver.saveAs(data, filename);
})
}
und hier ist mein Endpunkt:
@RequestMapping(value = "/files/download/{id:.*}", method = RequestMethod.GET)
@ResponseBody
@Timed
public void DownloadFiles(@PathVariable String id, HttpServletRequest request, HttpServletResponse response) throws IOException {
MongoClient mongoClient = new MongoClient();
DB mongoDB = mongoClient.getDB("angularspingproject");
BasicDBObject query = new BasicDBObject();
query.put("filename", id);
GridFS fileStore = new GridFS(mongoDB, "fs");
GridFSDBFile gridFSDBFile = fileStore.findOne(query);
if (gridFSDBFile != null && id.equalsIgnoreCase((String) gridFSDBFile.getFilename())) {
try {
response.setContentType(gridFSDBFile.getContentType());
response.setContentLength((new Long(gridFSDBFile.getLength()).intValue()));
response.setHeader("content-Disposition", "attachment; filename=" + gridFSDBFile.getFilename());
IOUtils.copyLarge(gridFSDBFile.getInputStream(), response.getOutputStream());
} catch (IOException e) {
throw new RuntimeException("IOError writting file to output stream");
}
}
}
Mein Kopf:
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Length: 316707
Content-Type: image/jpeg;charset=UTF-8
Pragma: no-cache
Server:Apache-Coyote/1.1
X-Application-Context : angularspingproject:8080
X-Content-Type-Options : nosniff
X-XSS-Protection: 1; mode=block
content-Disposition: attachment; filename=main_page.jpg
@Edit Problem behoben
vm.download = function (filename) {
$http.get('api/files/download/' + filename, {responseType:'blob'})
.then(function (response) {
console.log(response);
var data = new Blob([response.data], {type: 'image/jpeg;charset=UTF-8'});
FileSaver.saveAs(data, filename);
})
}
Ich habe response: 'Blob' auf $ http
Leider hat es nicht geholfen. –
Ich habe es gerade geändert. Ich hatte Png anstelle von JPEG. Das könnte das Problem sein. –
Ich habe das auch überprüft und funktioniert immer noch nicht. –