Я реализовал конечную точку в своем бэкэнде после видео. Загрузите файл из веб-службы RESTful. Моя задача - загрузить zip-файл из angular 6. Когда я нажимаю URL в своем браузеречто я запускаю сервер, файл загружен.Я пытаюсь Как использовать JAX-RS и Angular 2+ для загрузки zip-файла . В моем угловом коде подчеркивается строка response.blob()
и method: RequestMethod.Get
. Я не могу проверить, загрузится ли файлили нет, существует лучшее решение. Я новичок.
Конечная точка
@GET
@Path("download/{id}")
@Produces("application/zip")
public Response download(@PathParam("id") Integer id) {
ResponseBuilder response;
try {
int userId = angularsession.SessionManager.getOwnerID();
String filepath = EntryController.download(userId, id);
File file = new File(filepath);
String filename = FileManager.onlyFileNameFromAbsolutePath(filepath);
response = Response.ok((Object) file);
response.header("Content-Disposition", "attachment; filename=" + filename);
// return Response.status(Response.Status.OK).header("Content-Disposition", "attachment; filename=" + filename).entity((Object) file).build();
} catch (FileNotFoundException | PermissionException ex) {
response = Response.status(Status.NOT_FOUND);
} catch (IOException ex) {
response = Response.status(Status.INTERNAL_SERVER_ERROR);
}
return response.build();
}
Фильтр Cross Origin
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Угловой компонент
onDownload(id: number) {
this.entryService.downloadEntry(id).subscribe(
(response) => {
var blob = new Blob([response.blob()], { type: 'application/zip' });
var filename = 'file.zip';
fileSaver.saveAs(blob, filename);
}
);
}
Сервис
downloadEntry(id: number) {
return this.httpClient.get(`${this.url}/${this.endpoint}/${this.download}/${id}`, {
method: RequestMethod.Get,
responseType: ResponseContentType.Blob,
headers: new Headers({ 'Content-type': 'application/json' })
});
}
File Saver
import fileSaver = require("file-saver");
Зависимости
"file-saver": "^1.3.8",