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

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

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

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

0回答

1328閲覧

javaのFORM_DATAで送られてきた中身の構成がわからない。java ee & Angular

I_am_

総合スコア23

Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

HTTPヘッダー

Hypertext Transfer Protocol(HTTP)の中のHTTPヘッダフィールドはHTTPの要求やレスポンスの機能しているパラメーターが含まれます。その要求もしくはレスポンスライン(メッセージの最初の一行)でメッセージヘッダを作ります。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2021/03/16 17:13

編集2021/03/17 15:06

前提・実現したいこと

csvファイルのアップロードシステムを構築してます。
ネットの記事を参考にして構築をしてみたのですが、'multipart/form-data'
はどのような構成でバックエンド側に送られているのかがわかりません。

なので、どのような形でjavaで引数を受け取ればいいのかがわからないです。
具体的にはCsvUp(@FormDataParam("file") InputStream inputStream)ここの引数をどう定義すればCSVのbyteとファイルの名前をform-dataから受け取れるか?

formData.append("file[]")
とあるのですが、file[]配列にどのようにnameとbyte列のデータが入っているでしょうか?
Jsonのような形で入っているのでしょうか?
また配列の中をみる方法を教えてほしいです。

フロント:Angular (html, css, typescript)
バックエンド:Java EE 、Glassfish

また,FormDataのなかがこのような感じでどこに名前やcsvfileが入っているか理解できていないです。

FormData {} __proto__: FormData append: ƒ append() delete: ƒ delete() entries: ƒ entries() forEach: ƒ forEach() get: ƒ () getAll: ƒ getAll() has: ƒ has() keys: ƒ keys() set: ƒ () values: ƒ values() constructor: ƒ FormData() Symbol(Symbol.iterator): ƒ entries() Symbol(Symbol.toStringTag): "FormData" __proto__: Object

###エラー
ファイルのアップロードを実行すると以下のエラーが出てしまいます。

HttpErrorResponse {headers: HttpHeaders, status: 400, statusText: "Bad Request", url: "http://localhost:8080/application/app/service/csv-upload", ok: false, …

該当のソースコード

java

1 2 @Produces(MediaType.APPLICATION_JSON) 3 @Path("csv-upload") 4 @Consumes(MediaType.MULTIPART_FORM_DATA) 5 @POST 6 public boolean CsvUp(@FormDataParam("file") InputStream inputStream) throws Exception { 7 try { 8 CsvReader.PushFileWithIndex(file, file.name); 9 return true; 10 } catch (Exception e) { 11 return false; 12 } 13 }

html

1 <ngx-dropzone (change)="onSelect($event)"> 2 <ngx-dropzone-label>Drag and drop here</ngx-dropzone-label> 3 <ngx-dropzone-preview *ngFor="let f of files" [removable]="true" (removed)="onRemove(f)"> 4 <ngx-dropzone-label>{{ f.name }} ({{ f.type }})</ngx-dropzone-label> 5 </ngx-dropzone-preview> 6 </ngx-dropzone>

ts

1public formData = new FormData(); 2 onSelect(event: any) { 3 console.log(event); 4 if(this.files && this.files.length >=3) { 5 this.onRemove(this.files[0]); 6 } 7 this.files.push(...event.addedFiles); 8 9 for (var i = 0; i < this.files.length; i++) { 10 this.formData.append("file[]", this.files[i]); 11 } 12 console.log(this.formData) 13 console.log(this.files) 14 console.log(this.formData.getAll('files[]')); 15 console.log(this.formData.get('file[]')) 16 17 this.http.post('http://localhost:8080/application/app/service/csv-upload', this.formData, this.Options) 18 .subscribe(res => { 19 console.log(res); 20 21 }) 22 }

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

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

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

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

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

dodox86

2021/03/17 06:04

質問文からはクライアント(CSVファイルをサーバーへ送る方)とサーバー側(CSVファイルを受信する方)のプログラミング言語、フレームワークがどうも判然としません。CSVファイルをアップロードするのは、Javaで書いたプログラムなのですか? ご提示のコードで、CsvUp()メソッドとやらがそうなのでしょうか。それにしても@Producesや@Cosumesなどの独自のアノテーションが使われているようなので、何かしらのフレームワークを使っているものと推察します。そういったものを詳細に質問文中に記載しましょう。また、必要であればタグに追加してください。そうすることで適切でより詳しく回答できる方の目に留まるようになります。 ※ご提示のコードからはまったく分かりませんが、 1. CsvReader.PushFileWithIndex(file, file.name); とありますが、PushFileWithIndexとは質問者さんが所属している組織で作られた独自のメソッドなのではないでしょうか。メソッドの中でどのような処理をしているのか、正しくFORMデータを構築しているのかこれだけでは分からないと思います。 2. @Produces(MediaType.APPLICATION_JSON) "@Produces"アノテーションの意味するところは分かりませんが、CSVを扱っているのであるから、少なくともJSONでは無い気がします。あくまで想像ですが、HTTPリクエストのヘッダーフィールドに影響しそうなところです。
I_am_

2021/03/17 06:12

ありがとうございます。 質問の仕方と、情報が足りていませんでした。 参考にして修正してみます。
I_am_

2021/03/17 06:15

CsvReader.PushFileWithIndex(file_data, filename); ここに関してはファイルを保存する際にファイル名を変えたりしたかったのでこのように読み込むメソットを別にしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問