in src/main/java/org/apache/sling/servlets/post/impl/helper/StreamedChunk.java [92:135]
public StreamedChunk(Part part, Map<String, List<String>> formFields, ServletContext servletContext) {
this.part = part;
this.servletContext = servletContext;
String contentRangeHeader = part.getHeader("Content-Range");
String contentLengthHeader = part.getHeader("Content-Length");
if (contentRangeHeader != null) {
ContentRange contentRange = new ContentRange(contentRangeHeader);
fileLength = contentRange.length;
offset = contentRange.offset;
chunkLength = contentRange.range;
chunked = true;
} else if (formFields.containsKey(part.getName() + "@Length")
&& formFields.containsKey(part.getName() + "@Offset")) {
fileLength = Long.parseLong(lastFrom(formFields.get(part.getName() + "@Length")));
offset = Long.parseLong(lastFrom(formFields.get(part.getName() + "@Offset")));
if (contentLengthHeader != null) {
chunkLength = Long.parseLong(contentLengthHeader);
} else if (formFields.containsKey(part.getName() + "@PartLength")) {
chunkLength = Long.parseLong(lastFrom(formFields.get(part.getName() + "@PartLength")));
} else {
// must assume the chunk contains all the data.
LOGGER.info("No part length specified assuming this is the final part of the chunked upload.");
chunkLength = fileLength - offset;
}
chunked = true;
} else {
offset = 0;
if (contentLengthHeader != null) {
fileLength = Long.parseLong(contentLengthHeader);
chunkLength = fileLength;
} else {
fileLength = -1;
chunkLength = -1;
}
chunked = false;
}
chunkResourceName = "chunk_" + offset + "-" + (offset + chunkLength);
completed = ((offset + chunkLength) == fileLength) || formFields.containsKey(part.getName() + "@Completed");
LOGGER.debug(
" chunkResourceName {}, chunked {},completed {}, fileLength {}, chunkLength {}, offset {} ",
new Object[] {chunkResourceName, chunked, completed, fileLength, chunkLength, offset});
}