/** * Defines mime type by providing real mime type or just extension! */ public RawData as(final String mimeOrExtension) { if (mimeOrExtension.contains(StringPool.SLASH)) { this.mimeType = mimeOrExtension; } else { this.mimeType = MimeTypes.getMimeType(mimeOrExtension); } return this; }
/** * Returns the corresponding MIME type to the given extension. * If no MIME type was found it returns <code>application/octet-stream</code> type. */ public static String getMimeType(final String ext) { String mimeType = lookupMimeType(ext); if (mimeType == null) { mimeType = MIME_APPLICATION_OCTET_STREAM; } return mimeType; }
@Test void testSimpleMime() { assertEquals("application/atom+xml", MimeTypes.getMimeType("atom")); assertEquals("audio/x-wav", MimeTypes.getMimeType("wav")); assertEquals("image/jpeg", MimeTypes.getMimeType("jpg")); assertEquals("text/x-asm", MimeTypes.getMimeType("asm")); assertEquals("video/mp4", MimeTypes.getMimeType("mp4")); assertEquals("image/jpeg", MimeTypes.lookupMimeType("jpg")); assertEquals("application/octet-stream", MimeTypes.getMimeType("xxx")); assertNull(MimeTypes.lookupMimeType("xxx")); }
@Test void testFind() { String[] extensionArray = MimeTypes.findExtensionsByMimeTypes("image/jpeg", false); String extensions = ArraysUtil.toString(extensionArray) + ','; assertEquals(3, extensionArray.length); assertTrue(extensions.contains("jpe,")); assertTrue(extensions.contains("jpg,")); assertTrue(extensions.contains("jpeg,")); String[] extensionArray2 = MimeTypes.findExtensionsByMimeTypes("image/png", false); String[] extensionArray3 = MimeTypes.findExtensionsByMimeTypes("image/jpeg, image/png", false); assertEquals(extensionArray3.length, extensionArray2.length + extensionArray.length); }
@Test void testFindWithWildcards() { String[] extensionArray = MimeTypes.findExtensionsByMimeTypes("image/*", true); String extensions = ArraysUtil.toString(extensionArray) + ','; assertTrue(extensions.length() > 3); assertTrue(extensions.contains("jpe,")); assertTrue(extensions.contains("jpg,")); assertTrue(extensions.contains("jpeg,")); assertTrue(extensions.contains("bmp,")); assertTrue(extensions.contains("png,")); }
/** * Defines download file name and mime type from the name extension. */ public RawData downloadableAs(final String downloadFileName) { this.downloadFileName = downloadFileName; this.mimeType = MimeTypes.getMimeType(FileNameUtil.getExtension(downloadFileName)); return this; }
/** * Returns the corresponding MIME type to the given extension. * If no MIME type was found it returns <code>application/octet-stream</code> type. */ public static String getMimeType(final String ext) { String mimeType = lookupMimeType(ext); if (mimeType == null) { mimeType = MIME_APPLICATION_OCTET_STREAM; } return mimeType; }
/** * Resolves content type from all data. * * @param contentType Content type if we know it. {@code null} is fine to use. * @return content type */ protected String resolveContentType(final String contentType) { if (contentType != null) { return contentType; } if (name == null) { return MimeTypes.MIME_APPLICATION_OCTET_STREAM; } final String extension = FileNameUtil.getExtension(name); return MimeTypes.getMimeType(extension); }
/** * Prepares response for various provided data. * * @param response http response * @param fileName file name, if full path then file name will be stripped, if null, will be ignored. * @param mimeType mime type with optional charset, may be <code>null</code> * @param fileSize if less then 0 it will be ignored */ public static void prepareResponse(final HttpServletResponse response, final String fileName, String mimeType, final int fileSize) { if ((mimeType == null) && (fileName != null)) { String extension = FileNameUtil.getExtension(fileName); mimeType = MimeTypes.getMimeType(extension); } if (mimeType != null) { response.setContentType(mimeType); } if (fileSize >= 0) { response.setContentLength(fileSize); } // support internationalization // See https://tools.ietf.org/html/rfc6266#section-5 for more information. if (fileName != null) { String name = FileNameUtil.getName(fileName); String encodedFileName = URLCoder.encode(name); response.setHeader(CONTENT_DISPOSITION, "attachment;filename=\"" + name + "\";filename*=utf8''" + encodedFileName); } }
@Override protected boolean processActionPath(final HttpServletRequest servletRequest, final HttpServletResponse servletResponse, final String actionPath) throws IOException { String bundlePath = '/' + bundlesManager.getStaplerPath() + '/'; if (!actionPath.startsWith(bundlePath)) { return false; } String bundleId = actionPath.substring(bundlePath.length()); File file = bundlesManager.lookupBundleFile(bundleId); if (log.isDebugEnabled()) { log.debug("bundle: " + bundleId); } int ndx = bundleId.lastIndexOf('.'); String extension = bundleId.substring(ndx + 1); String contentType = MimeTypes.getMimeType(extension); servletResponse.setContentType(contentType); if (useGzip && ServletUtil.isGzipSupported(servletRequest)) { file = bundlesManager.lookupGzipBundleFile(file); servletResponse.setHeader("Content-Encoding", "gzip"); } if (!file.exists()) { throw new IOException("bundle not found: " + bundleId); } servletResponse.setHeader("Content-Length", String.valueOf(file.length())); servletResponse.setHeader("Last-Modified", TimeUtil.formatHttpDate(file.lastModified())); if (cacheMaxAge > 0) { servletResponse.setHeader("Cache-Control", "max-age=" + cacheMaxAge); } sendBundleFile(servletResponse, file); return true; }
mimeType = MimeTypes.getMimeType(FileNameUtil.getExtension(fileName));
/** * Resolves content type from all data. * * @param contentType Content type if we know it. {@code null} is fine to use. * @return content type */ protected String resolveContentType(final String contentType) { if (contentType != null) { return contentType; } if (name == null) { return MimeTypes.MIME_APPLICATION_OCTET_STREAM; } final String extension = FileNameUtil.getExtension(name); return MimeTypes.getMimeType(extension); }
@Override protected boolean processActionPath(final HttpServletRequest servletRequest, final HttpServletResponse servletResponse, final String actionPath) throws IOException { String bundlePath = '/' + bundlesManager.getStaplerPath() + '/'; if (!actionPath.startsWith(bundlePath)) { return false; } String bundleId = actionPath.substring(bundlePath.length()); File file = bundlesManager.lookupBundleFile(bundleId); if (log.isDebugEnabled()) { log.debug("bundle: " + bundleId); } int ndx = bundleId.lastIndexOf('.'); String extension = bundleId.substring(ndx + 1); String contentType = MimeTypes.getMimeType(extension); servletResponse.setContentType(contentType); if (useGzip && ServletUtil.isGzipSupported(servletRequest)) { file = bundlesManager.lookupGzipBundleFile(file); servletResponse.setHeader("Content-Encoding", "gzip"); } if (!file.exists()) { throw new IOException("bundle not found: " + bundleId); } servletResponse.setHeader("Content-Length", String.valueOf(file.length())); servletResponse.setHeader("Last-Modified", TimeUtil.formatHttpDate(file.lastModified())); if (cacheMaxAge > 0) { servletResponse.setHeader("Cache-Control", "max-age=" + cacheMaxAge); } sendBundleFile(servletResponse, file); return true; }
mimeType = MimeTypes.getMimeType(FileNameUtil.getExtension(fileName));