質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

2回答

4298閲覧

Java Springフレームワークで画像ファイル(パス)をDBと画像フォルダに格納したい。

退会済みユーザー

退会済みユーザー

総合スコア0

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/01/20 09:54

前提・実現したいこと

Springの勉強を始めたJava初心者です。
画像のファイルパスをデータベースに、画像ファイルをフォルダに格納したいです。
よろしくお願いいたします。

発生している問題・エラーメッセージ

画像のファイルパスをデータベースに、画像ファイルをフォルダに格納するためのコードを実装して実行したところ、nullPointerExceptionが投げられた。
そのため、まずはFormに欲しい値が入っているか確認するために、form.getMultipartFile()をSystem.out.printlnしたが、ここでnullが表示された。
→そもそもformに値が入っていないことが分かりました。

該当のソースコード

Controller

@PostMapping("upload") public String upload(UploadForm uploadForm) { System.out.println(uploadForm.getMultipartFile()); System.out.println(uploadForm.getStr()); return "ramen/register"; }

html

<form method="post" action="#" th:action="@{/ramen/upload}" enctype="multipart/form-data" th:object="${uploadForm}"> <div class="form-group"> <label for="file">File:</label> <input type="file" th:field="*{multipartFile}" id="file" class="form-control-file"> </div> <div class="form-group"> <label for="str">str</label> <input type="text" name="str" class="form-control" id="" /> </div> <div align="center"> <button type="submit" class="btn btn-primary">FILE UPLOAD</button><br><br> </div> </form>

UploadForm

package com.example.demo.app.ramen; import java.io.Serializable; import org.springframework.web.multipart.MultipartFile; public class UploadForm implements Serializable { private MultipartFile multipartFile; private String str; public MultipartFile getMultipartFile() { return multipartFile; } public void setMultipartFile(MultipartFile multipartFile) { this.multipartFile = multipartFile; } public String getStr() { return str; } public void setStr(String str) { this.str = str; } }

yml

spring: servlet: multipart: max-file-size: 1MB max-request-size: 10MB

試したこと

画像ファイルを利用するための設定やformの使い方など見直しました。具体的にしたことは次の2つです。
①FormのmultipartFileがnullで返ってくるため、そもそもFormの使い方が悪いのかと思い、String型のstrという変数に値を入れてSystem.out.printlnするとstrの値は返ってくることを確認した。
②multipartFileを利用するにはymlに設定が必要という記事を発見したため、その通りに記載した。

補足情報(FW/ツールのバージョンなど)

Java 11
Gradle 3

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

記載されている内容で実施したところ、特に問題なくアップロードされ、追加されたパラメータも取得できました。

Controllerの実装において、何か他のところで実装の問題があるかもしれません。
以下のControllerでは正しくアップロードされましたのでご確認ください。

java

1import org.springframework.stereotype.Controller; 2import org.springframework.web.bind.annotation.GetMapping; 3import org.springframework.web.bind.annotation.PostMapping; 4import org.springframework.web.bind.annotation.RequestMapping; 5 6import com.github.apz.controller.view.UploadForm; 7 8@Controller 9@RequestMapping("upload") 10public class FileUploadSampleController { 11 12 @GetMapping 13 public String display(UploadForm uploadForm) { 14 return "upload"; 15 } 16 17 @PostMapping 18 public String upload(UploadForm uploadForm) { 19 20 String filename = uploadForm.getMultipartFile().getOriginalFilename(); 21 String str = uploadForm.getStr(); 22 return "upload"; 23 } 24}

※HTMLテンプレートは同じものを利用しています

投稿2020/07/10 05:20

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/07/12 02:37

A-pZさん、ご回答ありがとうございます。 半年ぶりにこのソースを開いてみて動かしてみましたが、無事に動きました。 おそらくControllerがおかしかったのだと思います。少し前の話なので定かではないですが。。。 改めてご回答いただきありがとうございました。
guest

0

もし解決してたら参考にしたいです

投稿2020/06/29 13:58

m.kk

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/07/12 02:38

m.kkさん A-pZさんがご回答してくださったので、そちらをご参考にしてみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問