Невозможно открыть загруженный файл PDF.Загруженный pdf в клиентский браузер (т. Е. React.js) из внутреннего API java Rest (put-request) - PullRequest
0 голосов
/ 23 сентября 2019

Я реализую код для загрузки 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 в соответствующем действительном формате.

...