use of io.micronaut.http.server.types.files.StreamedFile in project zuliasearch by zuliaio.
the class AssociatedController method getMetadata.
@Get("/metadata")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public HttpResponse<?> getMetadata(@QueryValue(ZuliaConstants.ID) final String uniqueId, @QueryValue(ZuliaConstants.FILE_NAME) final String fileName, @QueryValue(ZuliaConstants.INDEX) final String indexName) {
ZuliaIndexManager indexManager = ZuliaNodeProvider.getZuliaNode().getIndexManager();
try {
if (uniqueId != null && fileName != null && indexName != null) {
ZuliaBase.AssociatedDocument associatedDocument = indexManager.getAssociatedDocument(indexName, uniqueId, fileName);
StreamedFile attach = new StreamedFile(new ByteArrayInputStream(associatedDocument.getMetadata().toByteArray()), MediaType.of(MediaType.APPLICATION_JSON)).attach(fileName);
MutableHttpResponse<StreamedFile> ok = HttpResponse.ok(attach);
attach.process(ok);
return ok;
} else {
return HttpResponse.serverError(ZuliaConstants.ID + " and " + ZuliaConstants.FILE_NAME + " are required");
}
} catch (Exception e) {
return HttpResponse.serverError(e.getMessage());
}
}
use of io.micronaut.http.server.types.files.StreamedFile in project micronaut-core by micronaut-projects.
the class FileTypeHandler method handle.
@SuppressWarnings("MagicNumber")
@Override
public void handle(Object obj, HttpRequest<?> request, MutableHttpResponse<?> response, ChannelHandlerContext context) {
NettyFileCustomizableResponseType type;
if (obj instanceof File) {
type = new NettySystemFileCustomizableResponseType((File) obj);
} else if (obj instanceof NettyFileCustomizableResponseType) {
type = (NettyFileCustomizableResponseType) obj;
} else if (obj instanceof StreamedFile) {
type = new NettyStreamedFileCustomizableResponseType((StreamedFile) obj);
} else if (obj instanceof SystemFile) {
type = new NettySystemFileCustomizableResponseType((SystemFile) obj);
} else {
throw new CustomizableResponseTypeException("FileTypeHandler only supports File or FileCustomizableResponseType types");
}
long lastModified = type.getLastModified();
// Cache Validation
ZonedDateTime ifModifiedSince = request.getHeaders().getDate(HttpHeaders.IF_MODIFIED_SINCE);
if (ifModifiedSince != null) {
// Only compare up to the second because the datetime format we send to the client
// does not have milliseconds
long ifModifiedSinceDateSeconds = ifModifiedSince.toEpochSecond();
long fileLastModifiedSeconds = lastModified / 1000;
if (ifModifiedSinceDateSeconds == fileLastModifiedSeconds) {
FullHttpResponse nettyResponse = notModified(response);
if (request instanceof NettyHttpRequest) {
((NettyHttpRequest<?>) request).prepareHttp2ResponseIfNecessary(nettyResponse);
}
context.writeAndFlush(nettyResponse);
return;
}
}
if (!response.getHeaders().contains(HttpHeaders.CONTENT_TYPE)) {
response.header(HttpHeaders.CONTENT_TYPE, type.getMediaType().toString());
}
setDateAndCacheHeaders(response, lastModified);
type.process(response);
type.write(request, response, context);
context.read();
}
Aggregations