Я реализую код для загрузки pdf / csv через веб-браузер из java-сервера с использованием сервисов Rest.Для этого я отправляю данные из запроса пут, который создаст файл, а затем построит ответ.Я могу скачать файл в формате pdf / csv, но не могу открыть.Pdf не открывается, поскольку он дает некоторую ошибку формата и в csv там на символах UTF-8 (невозможно прочитать).
Примечание: «Я не могу использовать клиентские библиотеки, такие как axios. Я должен реализовать этов сыром клиенте Rest "
Я установил ответ на запрос пут как" application / octet-stream ".
Внутренний сервис пут:
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Path("/exportReport")
public Response exportRequestedReport(final ProductSummaryReport summaryReport) {
try {
File toDownloadFile = productStatus.createReport(summaryReport);
Response.ResponseBuilder response = Response.ok(toDownloadFile, MediaType.APPLICATION_OCTET_STREAM);
response.header("Content-Disposition", "attachment; filename=\""+toDownloadFile.getName() +"\"");
response.header("Access-Control-Expose-Headers", "Content-Disposition,Content-Length");
return response.build();
} catch( Exception e ){
e.printStackTrace();
}
return Response.noContent().build();
}
Клиентдля создания объекта BLOB из ответа.
ProductStatusAPI.exportReport( url, data ).then( payload => {
const file = new Blob( [ payload.text ], { type: 'application/octet-stream' } );
if ( window.navigator && window.navigator.msSaveOrOpenBlob ) {
window.navigator.msSaveBlob( file, payload.xhr.getResponseHeader( 'Content-Disposition' ) );
} else {
const element = document.createElement( 'a' );
element.href = URL.createObjectURL( file );
element.download = payload.xhr.getResponseHeader( 'Content-Disposition' );
document.body.appendChild( element );
element.click();
document.body.removeChild( element );
}
dispatch( toggleBusy( false ) );
} ).catch( ( error ) => {
dispatch( fetchActionError( error ) );
toggleBusy( false );
} );
};
Запрос от внешнего интерфейса:
exportReport: ( url, body, schema, attribute, headers = {} ) => superAgent.put( `${API_ROOT}${url}`, body ).set( headers ).accept( accepts ).catch( RemoteErrorListener.handleError );
Я хочу загрузить pdf / csv в соответствующем действительном формате.