Spring bootでシステム構築をしているのですが、cssやjs以外の静的ファイルのアクセス方法が分からず困っています。
デプロイ方法:jar
具体的には、src/main/resourcesの中に新規にディレクトリを作り、javaでアクセスするためのファイルを設置しています。
ネットで検索したところこのような悩みを抱えている方は見つかりませんでしたが、そもそも方法として間違っているのでしょうか。
最悪jarファイルの設置ディレクトリに該当ファイルを設置することを考えておりますが、デプロイが複雑になるため、極力jar内にファイルを設置したいと考えています。
良い方法、あるいは上記の解決方法についてご存知の方がいましたら、ご教授願います。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
私も同様の疑問を持ち最近調べました
恐らく質問者様がやりたいことと同じかと思います
Spring に含まれている ResourceLoader というのを使うとファイルの取得が簡単にできます。
http://docs.spring.io/autorepo/docs/spring/3.2.x/spring-framework-reference/html/resources.html#resources-resourceloader
上記のドキュメントにも書かれてますが、getResource の引数によってどこから取得するかが変わります
classpath: ~とした場合には jar 内部のパスとして取得
file: ~とした場合にはファイルシステムのパスとして取得
なので、classpath: ~ の形式で指定することで、
jarファイル内部のファイルにアクセスすることができます
以下サンプルは動作確認してませんが参考までに
java
1import java.io.File; 2import org.springframework.core.io.Resource; 3import org.springframework.core.io.ResourceLoader; 4 5@Slf4j 6@Controller 7public class TestController { 8 9 @Autowired 10 ResourceLoader resourceLoader; 11 12 @RequestMapping(method = RequestMethod.GET, value = "/test") 13 public void index() throws Throwable { 14 String filepath = "path/to/file"; // src/main/resources 配下の相対パス 15 Resource resource = resourceLoader.getResource("classpath:" + filepath); 16 17 String name = resource.getFilename(); 18 log.info("name: " + name); 19 20 File file = resource.getFile(); 21 log.info("file.exists(): " + file.exists()); 22 log.info("file.getAbsolutePath(): " + file.getAbsolutePath()); 23 } 24}
投稿2016/03/01 05:47
総合スコア106
0
Spring Boot(というかSpring MVC)上での静的ファイル(css, js, 画像など)へのアクセス方法をまとめた記事をQiitaに投稿しているので、興味があればご覧ください。
投稿2016/05/15 03:27
総合スコア25
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
src/main/resources/files/filereadtest.txt を配置した状態で
java
1package teratail; 2 3import java.io.BufferedReader; 4import java.io.IOException; 5import java.io.InputStreamReader; 6 7public class FileReadExec { 8 9 public static void main(String[] args) throws IOException { 10 BufferedReader br = new BufferedReader( 11 new InputStreamReader(ClassLoader.getSystemResourceAsStream("files/filereadtest"))); 12 System.out.println(br.readLine()); 13 br.close(); 14 15 } 16} 17
こんな感じで取得できませんか?Springを使わずjava標準のクラスのみで書いてますが、
ClassLoader.getSystemResourceAsStream({リソースファイルのクラスパスからの相対位置})
で読み込めると思います。
投稿2016/01/31 13:06
総合スコア257
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ブラウザアクセスでしょうか?
そうであれば
src/main/resources配下のstaticディレクトリ内であればアクセスできると思います。
たとえば、下記の場合は/<context>/file/hoge.pdfでアクセス可能です。
src/main/resources
└ static
└ file
└ hoge.pdf
Javaアクセスするのであれば通常のファイル読み込みの処理でアクセス可能だと思います。
認識違ったらすいません。
投稿2016/01/22 09:41
退会済みユーザー
総合スコア0
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/01 15:06