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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

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

Spring Boot

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

Q&A

解決済

1回答

8406閲覧

SpringBootで画像をアップロード、保存したい

KOTAITO

総合スコア8

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Java

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

Spring Boot

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

1グッド

0クリップ

投稿2020/03/15 09:50

前提・実現したいこと

SpringBootを用いて、Rest原則で画像をアップロードするAPIを実装中です。
Multipartfileや、Outputstreamなどの理屈を調べながら実装しているのですが
繰り返しやっても以下のエラーメッセージが表示されてしまいます。。

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

java.nio.file.FileSystemException: src/main/images: Is a directory

該当のソースコード

Controller

@RequestMapping("/{id}/images") @PatchMapping(path = "{id}") public Product image( @PathVariable Long id, @RequestParam(name = "productImage") MultipartFile imageFile) { return productService.uploadImage(id, imageFile); }

Service

Java

1 public Product uploadImage(Long id, MultipartFile imageFile) { 2 3 String contentType = imageFile.getContentType(); 4 String imageFileName = UUID.randomUUID().toString() + contentType; 5 Path uploadfile = Paths.get("src/main/images"); 6 if (!Files.exists(uploadfile)) { 7 try { 8 Files.createDirectory(uploadfile); 9 } catch (Exception e) { 10 throw new RuntimeException(e); 11 } 12 } 13 try (OutputStream os = Files.newOutputStream(uploadfile, StandardOpenOption.CREATE)) { 14 byte[] bytes = imageFile.getBytes(); 15 os.write(bytes); 16 } catch (IOException e) { 17 throw new RuntimeException(e); 18 } 19 Product product = findById(id); 20 product.setImage_path(imageFileName); 21 return save(product); 22 }

試したこと

FileSystemExceptionの例外が出ているので、ファイル構造やディレクトリに関するエラーということで
保存先として指定しているディレクトリが存在していないのでは。。
と考え、path名を変えたり、予めディレクトリを作成してみたのですが、うまくいきません。。

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

アップロードした画像を格納させたいディレクトリは
src/mainの直下に"images"という名前で配置しております

json形式でデータを送受信するAPIを作成しているので
画像データは別に、PATCHで変更するような仕様となっております
htmlからformタグなどでデータを送信するのではなく、
insomniaを使用して仮想的にデータを飛ばしています!

API作成が初めてなので、未知な部分が多いですが、
何か原因がございましたら、ご教授頂ければ幸いです。。

何卒よろしくお願い致します

encho👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

src/main/images: Is a directory

メッセージそのままの問題です.
src/main/images はフォルダなのですから newOutputStream は出来ないでしょう.

投稿2020/03/15 15:02

jimbe

総合スコア12632

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

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

KOTAITO

2020/03/16 04:14

jimbeさん ご回答頂きありがとうございます! おっしゃる通りです。。 Path filePath = Paths.get(imagepath, imageFileName); imageFile.transferTo(filePath); として、filepathを指定して、直接trasferToメソッドで渡したところ、正常に作動しました汗 お騒がせしました。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問