teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

コードを差し替えました。

2020/05/08 05:58

投稿

tohmey
tohmey

スコア10

title CHANGED
File without changes
body CHANGED
@@ -1,12 +1,28 @@
1
1
  いま目指すゴールは、画面にドラッグアンドドロップしたファイルを、ControllerでMultipartFileのリストまたは配列で受け取ること。
2
2
 
3
- いまのところ、MultipartFileのリストまたは配列(両方試しました)で受け取る…までは行ったのですが、肝心のMultipartFileの中身が、filename="", part/fileitem={name=, StoreLocation=null, size=0 bytes, isFormField=false, FieldName=files}といった感じで、からっぽです。
4
-
5
3
  ちょっとしたヒントで構いませんので、教えていただけるとありがたいです。
6
4
 
5
+ ※追記
6
+ ajaxを使ったパターンに差し替えました。(ほぼ昨日の状態…)
7
+ contorollerに届かないところでとん挫しています。まだ糸口は見つかっていません。
8
+ (プロジェクト内ではもちろんajax使っている箇所はたくさんあり、パス指定による単ファイルアップロードもできています。が、なぜか、どのパターンをここに応用してもうまくいかない…)←ajaxを深く理解しないまま流用しつづけているからですが…。
9
+
10
+ ブラウザのエラーメッセージ:
11
+ Object
12
+ jquery-1.11.0.min.js:4 Uncaught TypeError: Illegal invocation
13
+ at e (jquery-1.11.0.min.js:4)
14
+ at Wc (jquery-1.11.0.min.js:4)
15
+ at Function.n.param (jquery-1.11.0.min.js:4)
16
+ at Function.ajax (jquery-1.11.0.min.js:4)
17
+ at sendFiles (dropfile.js:114)
18
+ at HTMLTextAreaElement.<anonymous> (dropfile.js:102)
19
+ at HTMLTextAreaElement.dispatch (jquery-1.11.0.min.js:3)
20
+ at HTMLTextAreaElement.r.handle (jquery-1.11.0.min.js:3)
21
+
22
+ ひとまずここから、formDataの使い方などをもういちど確認していきたいと思っています。
23
+
7
24
  ```html
8
25
  <div id="dropArea">ここにファイルをドラッグ&ドロップしてください</div>
9
- <form method="post" id="dropUpload" th:action="@{/dropUpload}" enctype="multipart/form-data" th:object="${form}"></form>
10
26
  ```
11
27
  ```js
12
28
  $("#dropArea").on('dragenter', function (e) {
@@ -19,26 +35,39 @@
19
35
  })
20
36
  .on('drop', function(e) {
21
37
  e.preventDefault();
22
- var dropFiles = e.originalEvent.dataTransfer.files;
38
+ sendFiles(e.originalEvent.dataTransfer.files, '/dropUpload1');
39
+ });
40
+
41
+ function sendFiles(files, url) {
42
+ if(!confirm("ファイルをフォルダに追加しますか?")) return;
43
+
23
- var $fm = $('#dropUpload');
44
+ var formData = new FormData();
24
- for (var i = 0; i < dropFiles.length; i++) {
45
+ for (var i = 0; i < files.length; i++){
46
+ alert(i); //←ファイル個数分表示される
25
- $fm.append($('<input>', {name: 'files', type: 'file', value: dropFiles[i]}));
47
+ formData.append('files', files[i]);
26
48
  }
49
+
27
- $fm.submit();
50
+ $.ajax({
51
+ type: "POST",
52
+ url : url,
53
+ data: formData,
54
+ success : function(data, status, xhr) {
55
+ // 処理など
56
+ },
57
+ error : function(XMLHttpRequest,
58
+ textStatus, errorThrown) {
59
+ // 処理など
60
+ }
28
- });
61
+ });
62
+ }
63
+
29
64
  ```
30
65
  ```java
31
66
  @RestController
32
67
  public class DropInController {
33
- @RequestMapping(value = "dropUpload", method = RequestMethod.POST)
68
+ @RequestMapping(value = "/dropUpload1", method = RequestMethod.POST)
34
- public void dropUpload(UploadForm form, Model model) {
69
+ public String dropUpload1(@RequestParam("files") List<MultipartFile> files, Model model) {
35
- MultipartFile[] files = form.getFiles();
70
+ // 処理など
36
71
  }
37
72
  }
38
- ```
39
- ```java
40
- @Data
41
- public class UploadForm {
42
- private MultipartFile[] files;
43
- }
44
73
  ```