/** * キー情報から実ファイルデータを取得し、それらからメタデータを生成して返します. * * @param key ファイルデータのキー情報 * @return キーから生成したメタデータ */ @Override public UrlTreeMetaData<InputStream> generateMetaDataFromReal(String key, UrlTreeContext ctx) throws BadContentException { if (!this.canLoad(key, ctx)) { throw new IllegalArgumentException( "Cannot Load it. check before can it load with canLoad(key): " + key); } Path p = this.generateFileObj(key); File f = p.toFile(); long lastModified = f.lastModified(); logger.trace("[デバッグ]ファイル名とファイルのlastModified: " + p.toString() + ":" + lastModified); UrlTreeMetaData<InputStream> md = new UrlTreeMetaData<>(); md.setDirectory(Files.isDirectory(p, LinkOption.NOFOLLOW_LINKS)); md.setFilename(key); md.setOwnerId(ctx.getUserName()); md.setGroupId(ctx.getPrimaryGroup()); md.setCreatedTime(lastModified); md.setUpdatedTime(lastModified); md.setPermission(ctx.getDefaultPermission()); String contentType = new MimetypesFileTypeMap().getContentType(p.getFileName().toString()); md.setContentType(contentType); return md; }
/** * ファイルデータをストレージからロードします. * * @param metadata urlTreeメタデータオブジェクト * @param ctx urlTreeコンテキストオブジェクト * @return ロードされたファイルデータ */ @Override public InputStream load(UrlTreeMetaData<InputStream> metadata, UrlTreeContext ctx) throws BadContentException, TargetNotFoundException { Path f = this.generateFileObj(metadata.getAbsolutePath()); if (!Files.exists(f) || !Files.isReadable(f)) { throw new TargetNotFoundException("cannot read real file"); } InputStream contents; try { contents = Files.newInputStream(f); } catch (IOException e) { throw new GenericResourceException(e); } String contentType = new MimetypesFileTypeMap().getContentType(f.getFileName().toString()); metadata.setContentType(contentType); return contents; }