質問編集履歴

1

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

2020/05/08 05:58

投稿

tohmey
tohmey

スコア10

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