Bereichsanforderungen funktionieren nicht wie erwartet mit dynamischer API -QuelleJava

Java-Forum
Anonymous
 Bereichsanforderungen funktionieren nicht wie erwartet mit dynamischer API -Quelle

Post by Anonymous »

Ich implementiere die Funktion der Bereichsanforderungen in NGX-Extended-PDF-Viewer, um die Ladeleistung großer PDF-Dateien zu verbessern.

pdfDefaultOptions.disableAutoFetch = true;
pdfDefaultOptions.disableStream = false;
pdfDefaultOptions.disableRange = false;
< /code>
Bei Verwendung eines statischen Dateipfads wie: < /p>
this.src = '/assets/100MB-TESTFILE.pdf';
< /code>
Die 100-MB-Datei beginnt nach dem Laden von nur 10 MB, wobei die verbleibenden Daten zunehmend abgerufen werden.this.src = this.apiService.getDocumentFileURl();

getDocumentFileURl() {
return `${api_root}/document/${this.session.documentId}/version/${this.session.version}/view?language=${Helpers.getQueryParam('language', 'en')}&token=${this.session.token}`;
}
< /code>
Die PDF-Datei wird erst angezeigt, wenn 50 MB geladen wurden und die Ladezeit erheblich erhöht.@GET
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@Authorized
@Path("view")
public Response view(@QueryParam("language") String language, @Context ContainerRequestContext crc) throws Exception {
try {
String token = Token.getToken(crc);
UserDocument userDocument = (UserDocument) crc.getProperty(UserDocument.USER_DOCUMENT_KEY);
String filePath = userDocument.getVersion().getFileType() == FileType.VIDEO
? userDocument.getVersion().getFilePath()
: userDocument.getVersion().getPDFCopyPath();

if (!Files.exists(Paths.get(filePath))) {
return Response.status(Status.NOT_FOUND).build();
}

InputStream fileStream = Helpers.getFileInputStreamForRead(filePath);
long fileLength = fileStream.available();

String rangeHeader = crc.getHeaderString("Range");

if (rangeHeader != null && rangeHeader.startsWith("bytes=")) {
// Parse Range Header
String[] ranges = rangeHeader.substring("bytes=".length()).split("-");
long start = Long.parseLong(ranges[0]);
long end = ranges.length > 1 ? Long.parseLong(ranges[1]) : fileLength - 1;

// Validate range
if (start >= fileLength || end >= fileLength) {
return Response.status(Response.Status.REQUESTED_RANGE_NOT_SATISFIABLE)
.header("Content-Range", "bytes */" + fileLength)
.build();
}

long contentLength = end - start + 1;
fileStream.skip(start);

return Response.status(Response.Status.PARTIAL_CONTENT)
.entity(fileStream)
.header("Access-Control-Expose-Headers", "Accept-Ranges")
.header("Access-Control-Allow-Headers", "Accept-Ranges,range")
.header("Content-Range", "bytes " + start + "-" + end + "/" + fileLength)
.header("Accept-Ranges", "bytes")
.header("Content-Length", contentLength)
.header("Content-Type", "application/pdf; charset=UTF-8")
.build();
}

// If no Range header, return the entire file
return Response.ok()
.header("Access-Control-Expose-Headers", "Accept-Ranges")
.header("Access-Control-Allow-Headers", "Accept-Ranges,range")
.header("Accept-Ranges", "bytes")
.header("Content-Length", fileLength)
.header("Content-Type", "application/pdf; charset=UTF-8")
.entity(fileStream)
.build();

} catch (FileNotFoundException e) {
e.printStackTrace();
return Response.status(Response.Status.NOT_FOUND).build();
}
}
< /code>
Frage < /h3>
Wie kann ich meine Implementierung so ändern, dass die dynamische API-Quelle sich wie die statische Quelle verhält, sodass das PDF nach 10 MB progressiv laden kann, anstatt 50 MB zu erfordern, bevor das Rendening-Pdf-View-PDF-PDF-PDF-PDF-pdf-pdf-pdf-pdf-pdf-pdf-pdf-pdf-pdf-pdf-pdf-pdf-pdf-pdf-pdf-pdf-pdf-pdfer-pdf-pdf-pdf-pdfer-pdfer-pdfer-pdf-pdfer-pdf-pdfer-pdfer-pdf-pdf-pdf-pdf-pdf-pdf-pdf-pdf-pdf-pdfer-Bereich erforderlich ist. sehr geschätzt.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post