/** * Get a {@link MediaType} for a file. * * @param file A candidate file. * @return A {@link MediaType} or {@link MediaType#octetstream} for unknown file extensions. */ public static Optional<MediaType> byFile(final File file) { requireNonNull(file, "A file is required."); return byPath(file.getName()); }
/** * Get a {@link MediaType} for a file path. * * @param path A candidate file path. * @return A {@link MediaType} or empty optional for unknown file extensions. */ public static Optional<MediaType> byPath(final Path path) { requireNonNull(path, "A path is required."); return byPath(path.toString()); }
@Override public MediaType type() { return header("Content-Type").toOptional(MediaType.class) .orElseGet(() -> MediaType.byPath(name()).orElse(MediaType.octetstream)); }
@Override public void download(final String filename, final String location) throws Throwable { URL url = getClass().getResource(location.startsWith("/") ? location : "/" + location); if (url == null) { throw new FileNotFoundException(location); } // handle type type(type().orElseGet(() -> MediaType.byPath(filename).orElse(MediaType.byPath(location) .orElse(MediaType.octetstream)))); URLAsset asset = new URLAsset(url, location, type); length(asset.length()); contentDisposition(filename); send(Results.with(asset)); }
@Override public void download(final String filename, final InputStream stream) throws Throwable { requireNonNull(filename, "A file's name is required."); requireNonNull(stream, "A stream is required."); // handle type type(type().orElseGet(() -> MediaType.byPath(filename).orElse(MediaType.octetstream))); Asset asset = new InputStreamAsset(stream, filename, type); contentDisposition(filename); send(Results.with(asset.stream())); }
@Override public void handle(final Request req, final Response rsp) throws Throwable { String path = req.path(); URL resource = resolve(req, path); if (resource != null) { String localpath = resource.getPath(); int jarEntry = localpath.indexOf("!/"); if (jarEntry > 0) { localpath = localpath.substring(jarEntry + 2); } URLAsset asset = new URLAsset(resource, path, MediaType.byPath(localpath).orElse(MediaType.octetstream)); if (asset.exists()) { // cdn? if (cdn != null) { String absUrl = cdn + path; rsp.redirect(absUrl); rsp.end(); } else { doHandle(req, rsp, asset); } } } else if (statusCode > 0) { throw new Err(statusCode); } }
/** * Get a {@link MediaType} for a file. * * @param file A candidate file. * @return A {@link MediaType} or {@link MediaType#octetstream} for unknown file extensions. */ public static Optional<MediaType> byFile(final File file) { requireNonNull(file, "A file is required."); return byPath(file.getName()); }
/** * Get a {@link MediaType} for a file path. * * @param path A candidate file path. * @return A {@link MediaType} or empty optional for unknown file extensions. */ public static Optional<MediaType> byPath(final Path path) { requireNonNull(path, "A path is required."); return byPath(path.toString()); }
@Override public MediaType type() { return header("Content-Type").toOptional(MediaType.class) .orElseGet(() -> MediaType.byPath(name()).orElse(MediaType.octetstream)); }
@Override public void download(final String filename, final String location) throws Throwable { URL url = getClass().getResource(location.startsWith("/") ? location : "/" + location); if (url == null) { throw new FileNotFoundException(location); } // handle type type(type().orElseGet(() -> MediaType.byPath(filename).orElse(MediaType.byPath(location) .orElse(MediaType.octetstream)))); URLAsset asset = new URLAsset(url, location, type); length(asset.length()); contentDisposition(filename); send(Results.with(asset)); }
@Override public void download(final String filename, final InputStream stream) throws Throwable { requireNonNull(filename, "A file's name is required."); requireNonNull(stream, "A stream is required."); // handle type type(type().orElseGet(() -> MediaType.byPath(filename).orElse(MediaType.octetstream))); Asset asset = new InputStreamAsset(stream, filename, type); contentDisposition(filename); send(Results.with(asset.stream())); }
@Override public void handle(final Request req, final Response rsp) throws Throwable { String path = req.path(); URL resource = resolve(req, path); if (resource != null) { String localpath = resource.getPath(); int jarEntry = localpath.indexOf("!/"); if (jarEntry > 0) { localpath = localpath.substring(jarEntry + 2); } URLAsset asset = new URLAsset(resource, path, MediaType.byPath(localpath).orElse(MediaType.octetstream)); if (asset.exists()) { // cdn? if (cdn != null) { String absUrl = cdn + path; rsp.redirect(absUrl); rsp.end(); } else { doHandle(req, rsp, asset); } } } else if (statusCode > 0) { throw new Err(statusCode); } }