n8n-nodes-multiple-upload-request 0.1.1 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +19 -19
- package/README.md +276 -276
- package/dist/credentials/BearerTokenAuthApi.credentials.d.ts +1 -2
- package/dist/credentials/BearerTokenAuthApi.credentials.js +0 -6
- package/dist/credentials/BearerTokenAuthApi.credentials.js.map +1 -1
- package/dist/credentials/CustomHeaderAuthApi.credentials.d.ts +1 -2
- package/dist/credentials/CustomHeaderAuthApi.credentials.js +0 -6
- package/dist/credentials/CustomHeaderAuthApi.credentials.js.map +1 -1
- package/dist/icons/github.dark.svg +3 -3
- package/dist/icons/github.svg +3 -3
- package/dist/nodes/Example/example.dark.svg +13 -13
- package/dist/nodes/Example/example.svg +13 -13
- package/dist/nodes/MultipleUploadRequest/MultipleUploadRequest.node.js +56 -19
- package/dist/nodes/MultipleUploadRequest/MultipleUploadRequest.node.js.map +1 -1
- package/dist/nodes/MultipleUploadRequest/description.js +32 -0
- package/dist/nodes/MultipleUploadRequest/description.js.map +1 -1
- package/dist/nodes/MultipleUploadRequest/upload.dark.svg +7 -7
- package/dist/nodes/MultipleUploadRequest/upload.svg +7 -7
- package/dist/package.json +2 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +54 -54
package/LICENSE.md
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
Copyright 2022 n8n
|
|
2
|
-
|
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
4
|
-
this software and associated documentation files (the "Software"), to deal in
|
|
5
|
-
the Software without restriction, including without limitation the rights to
|
|
6
|
-
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
7
|
-
of the Software, and to permit persons to whom the Software is furnished to do
|
|
8
|
-
so, subject to the following conditions:
|
|
9
|
-
|
|
10
|
-
The above copyright notice and this permission notice shall be included in all
|
|
11
|
-
copies or substantial portions of the Software.
|
|
12
|
-
|
|
13
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
-
SOFTWARE.
|
|
1
|
+
Copyright 2022 n8n
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
4
|
+
this software and associated documentation files (the "Software"), to deal in
|
|
5
|
+
the Software without restriction, including without limitation the rights to
|
|
6
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
7
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
|
8
|
+
so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,276 +1,276 @@
|
|
|
1
|
-

|
|
2
|
-
|
|
3
|
-
# n8n Multiple Upload Request Node
|
|
4
|
-
|
|
5
|
-
Một n8n community node chuyên dụng để upload nhiều file nhị phân (binary files) động với khả năng lọc theo pattern và hỗ trợ authentication.
|
|
6
|
-
|
|
7
|
-
**Tiếng Việt** | [English](README_EN.md)
|
|
8
|
-
|
|
9
|
-
## Tính năng chính
|
|
10
|
-
|
|
11
|
-
✨ **Upload nhiều file động** - Tự động upload tất cả các file nhị phân từ input hoặc lọc theo pattern
|
|
12
|
-
|
|
13
|
-
🎯 **Lọc file theo pattern** - Hỗ trợ wildcard patterns (`*`, `?`) để chọn lọc file cần upload
|
|
14
|
-
|
|
15
|
-
🔐 **Authentication linh hoạt** - Hỗ trợ Bearer Token, Custom Header, hoặc không authentication
|
|
16
|
-
|
|
17
|
-
🔧 **Tùy chỉnh linh hoạt** - Thêm form fields, query parameters, custom headers
|
|
18
|
-
|
|
19
|
-
📡 **HTTP Methods** - Hỗ trợ POST, PUT, PATCH requests
|
|
20
|
-
|
|
21
|
-
⚡ **Xử lý lỗi mạnh mẽ** - Continue on fail, timeout configuration, SSL validation options
|
|
22
|
-
|
|
23
|
-
## Cài đặt
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
npm install n8n-nodes-multiple-upload-request
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
## Cách sử dụng
|
|
30
|
-
|
|
31
|
-
### 1. Thêm node vào workflow
|
|
32
|
-
Tìm kiếm **"Multiple Upload Request"** trong danh sách nodes của n8n.
|
|
33
|
-
|
|
34
|
-
### 2. Cấu hình cơ bản
|
|
35
|
-
|
|
36
|
-
**Authentication**: Chọn phương thức xác thực
|
|
37
|
-
- **None**: Không cần xác thực
|
|
38
|
-
- **Bearer Token**: Sử dụng Bearer token (cần credential)
|
|
39
|
-
- **Custom Header**: Sử dụng custom header authentication (cần credential)
|
|
40
|
-
|
|
41
|
-
**Request Method**: Chọn HTTP method (POST/PUT/PATCH)
|
|
42
|
-
|
|
43
|
-
**URL**: URL endpoint để upload file
|
|
44
|
-
|
|
45
|
-
**File Pattern**: Pattern để lọc file (mặc định: `*` - tất cả file)
|
|
46
|
-
- `*` - Upload tất cả file
|
|
47
|
-
- `*.jpg` - Chỉ upload file .jpg
|
|
48
|
-
- `image_*` - Upload file bắt đầu bằng "image_"
|
|
49
|
-
- `file_?.pdf` - Upload file như file_1.pdf, file_a.pdf
|
|
50
|
-
|
|
51
|
-
**Binary Property Name**: Tên property chứa binary data (mặc định: `data`)
|
|
52
|
-
- Có thể nhập nhiều property, phân cách bằng dấu phẩy: `data, file, attachment`
|
|
53
|
-
|
|
54
|
-
### 3. Tùy chọn nâng cao
|
|
55
|
-
|
|
56
|
-
#### Additional Form Fields
|
|
57
|
-
Thêm các field text vào form data cùng với file upload.
|
|
58
|
-
|
|
59
|
-
#### Query Parameters
|
|
60
|
-
Thêm query parameters vào URL request.
|
|
61
|
-
|
|
62
|
-
#### Additional Headers
|
|
63
|
-
Thêm custom headers vào request (ví dụ: Content-Type, X-Custom-Header).
|
|
64
|
-
|
|
65
|
-
#### Timeout
|
|
66
|
-
Cấu hình thời gian timeout cho request (mặc định: 10000ms).
|
|
67
|
-
|
|
68
|
-
#### Ignore SSL Issues
|
|
69
|
-
Bỏ qua lỗi SSL certificate validation (hữu ích cho môi trường development).
|
|
70
|
-
|
|
71
|
-
## Ví dụ sử dụng
|
|
72
|
-
|
|
73
|
-
### Ví dụ 1: Upload tất cả ảnh JPG
|
|
74
|
-
```
|
|
75
|
-
File Pattern: *.jpg
|
|
76
|
-
Binary Property Name: data
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
### Ví dụ 2: Upload nhiều file từ nhiều property
|
|
80
|
-
```
|
|
81
|
-
File Pattern: *
|
|
82
|
-
Binary Property Name: image, document, attachment
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
### Ví dụ 3: Upload với Bearer authentication
|
|
86
|
-
```
|
|
87
|
-
Authentication: Bearer Token
|
|
88
|
-
Request Method: POST
|
|
89
|
-
URL: https://api.example.com/upload
|
|
90
|
-
File Pattern: *
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### Ví dụ 4: Upload với form fields bổ sung
|
|
94
|
-
```
|
|
95
|
-
Additional Form Fields:
|
|
96
|
-
- userId: 12345
|
|
97
|
-
- category: documents
|
|
98
|
-
- tags: important,urgent
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
## Pattern Matching
|
|
102
|
-
|
|
103
|
-
Node hỗ trợ wildcard patterns để lọc file:
|
|
104
|
-
|
|
105
|
-
- `*` - Khớp với bất kỳ ký tự nào (0 hoặc nhiều)
|
|
106
|
-
- `?` - Khớp với đúng 1 ký tự
|
|
107
|
-
- Pattern không phân biệt hoa thường
|
|
108
|
-
|
|
109
|
-
**Ví dụ patterns:**
|
|
110
|
-
- `*.pdf` → Tất cả file PDF
|
|
111
|
-
- `report_*.xlsx` → Các file Excel bắt đầu bằng "report_"
|
|
112
|
-
- `image_?.png` → image_1.png, image_a.png, image_x.png
|
|
113
|
-
- `2024-??-*.jpg` → 2024-01-photo.jpg, 2024-12-image.jpg
|
|
114
|
-
|
|
115
|
-
## Credentials
|
|
116
|
-
|
|
117
|
-
### Bearer Token Authentication
|
|
118
|
-
|
|
119
|
-
Để sử dụng Bearer Token authentication:
|
|
120
|
-
|
|
121
|
-
1. Tạo credential mới loại **Bearer Token Auth**
|
|
122
|
-
2. Nhập Bearer token của bạn
|
|
123
|
-
3. Chọn credential này trong node
|
|
124
|
-
|
|
125
|
-
### Custom Header Authentication
|
|
126
|
-
|
|
127
|
-
Để sử dụng Custom Header authentication:
|
|
128
|
-
|
|
129
|
-
1. Tạo credential mới loại **Custom Header Auth**
|
|
130
|
-
2. Nhập Header Name (ví dụ: `X-API-Key`, `Authorization`)
|
|
131
|
-
3. Nhập Header Value (giá trị của header)
|
|
132
|
-
4. Chọn credential này trong node
|
|
133
|
-
|
|
134
|
-
## API Response
|
|
135
|
-
|
|
136
|
-
Node trả về response JSON từ server:
|
|
137
|
-
|
|
138
|
-
```json
|
|
139
|
-
{
|
|
140
|
-
"success": true,
|
|
141
|
-
"message": "Files uploaded successfully",
|
|
142
|
-
"files": [
|
|
143
|
-
{
|
|
144
|
-
"filename": "image1.jpg",
|
|
145
|
-
"size": 102400,
|
|
146
|
-
"url": "https://example.com/uploads/image1.jpg"
|
|
147
|
-
}
|
|
148
|
-
]
|
|
149
|
-
}
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
## Xử lý lỗi
|
|
153
|
-
|
|
154
|
-
Node hỗ trợ Continue on Fail mode:
|
|
155
|
-
- Khi bật: Lỗi sẽ được trả về dưới dạng JSON và workflow tiếp tục
|
|
156
|
-
- Khi tắt: Lỗi sẽ dừng workflow
|
|
157
|
-
|
|
158
|
-
## Development
|
|
159
|
-
|
|
160
|
-
### Yêu cầu
|
|
161
|
-
|
|
162
|
-
- **[Node.js](https://nodejs.org/)** (v22 trở lên) và npm
|
|
163
|
-
- **[git](https://git-scm.com/downloads)**
|
|
164
|
-
|
|
165
|
-
### Clone và cài đặt
|
|
166
|
-
|
|
167
|
-
```bash
|
|
168
|
-
git clone https://github.com/OrgGem/n8n-nodes-multiple-upload-request.git
|
|
169
|
-
cd n8n-nodes-multiple-upload-request
|
|
170
|
-
npm install
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
### Development mode
|
|
174
|
-
|
|
175
|
-
Chạy n8n với node được load và hot reload enabled:
|
|
176
|
-
|
|
177
|
-
```bash
|
|
178
|
-
npm run dev
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
### Build
|
|
182
|
-
|
|
183
|
-
Build node cho production:
|
|
184
|
-
|
|
185
|
-
```bash
|
|
186
|
-
npm run build
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
### Lint và format
|
|
190
|
-
|
|
191
|
-
```bash
|
|
192
|
-
npm run lint
|
|
193
|
-
npm run lint:fix
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
## Testing
|
|
197
|
-
|
|
198
|
-
Xem [TESTING_GUIDE.md](TESTING_GUIDE.md) để biết chi tiết về các test scenarios và cách validate node.
|
|
199
|
-
|
|
200
|
-
## Use Cases
|
|
201
|
-
|
|
202
|
-
### 1. Upload ảnh từ form submission
|
|
203
|
-
Workflow nhận nhiều ảnh từ webhook form submission và upload lên cloud storage.
|
|
204
|
-
|
|
205
|
-
### 2. Batch upload documents
|
|
206
|
-
Upload hàng loạt documents từ một folder vào document management system.
|
|
207
|
-
|
|
208
|
-
### 3. Backup files
|
|
209
|
-
Định kỳ backup các file quan trọng lên remote storage với authentication.
|
|
210
|
-
|
|
211
|
-
### 4. Image processing pipeline
|
|
212
|
-
Upload ảnh đã xử lý (resize, watermark) lên CDN.
|
|
213
|
-
|
|
214
|
-
### 5. Multi-tenant file upload
|
|
215
|
-
Upload file của nhiều users khác nhau với dynamic authentication headers.
|
|
216
|
-
|
|
217
|
-
## Công nghệ sử dụng
|
|
218
|
-
|
|
219
|
-
- **TypeScript** - Type-safe development
|
|
220
|
-
- **n8n-workflow** - n8n SDK và types
|
|
221
|
-
- **Node.js** - Runtime environment
|
|
222
|
-
- **Multipart form-data** - File upload handling
|
|
223
|
-
|
|
224
|
-
## Cấu trúc thư mục
|
|
225
|
-
|
|
226
|
-
```
|
|
227
|
-
nodes/MultipleUploadRequest/
|
|
228
|
-
├── MultipleUploadRequest.node.ts # Main node implementation
|
|
229
|
-
├── MultipleUploadRequest.node.json # Node metadata
|
|
230
|
-
├── description.ts # UI property definitions
|
|
231
|
-
├── utils.ts # Wildcard pattern matching
|
|
232
|
-
├── upload.svg # Light mode icon
|
|
233
|
-
└── upload.dark.svg # Dark mode icon
|
|
234
|
-
|
|
235
|
-
credentials/
|
|
236
|
-
├── BearerTokenAuthApi.credentials.ts # Bearer token auth
|
|
237
|
-
└── CustomHeaderAuthApi.credentials.ts # Custom header auth
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
## Contributing
|
|
241
|
-
|
|
242
|
-
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
243
|
-
|
|
244
|
-
1. Fork the repository
|
|
245
|
-
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
|
|
246
|
-
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
|
|
247
|
-
4. Push to the branch (`git push origin feature/AmazingFeature`)
|
|
248
|
-
5. Open a Pull Request
|
|
249
|
-
|
|
250
|
-
## License
|
|
251
|
-
|
|
252
|
-
This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details.
|
|
253
|
-
|
|
254
|
-
## Support
|
|
255
|
-
|
|
256
|
-
- **Documentation**: [n8n docs](https://docs.n8n.io/)
|
|
257
|
-
- **Community**: [n8n community forum](https://community.n8n.io/)
|
|
258
|
-
- **Issues**: [GitHub Issues](https://github.com/OrgGem/n8n-nodes-multiple-upload-request/issues)
|
|
259
|
-
|
|
260
|
-
## Changelog
|
|
261
|
-
|
|
262
|
-
Xem [CHANGELOG.md](CHANGELOG.md) để biết lịch sử thay đổi.
|
|
263
|
-
|
|
264
|
-
## Author
|
|
265
|
-
|
|
266
|
-
**n8n Community**
|
|
267
|
-
- Email: community@n8n.io
|
|
268
|
-
|
|
269
|
-
## Acknowledgments
|
|
270
|
-
|
|
271
|
-
- n8n team for the excellent workflow automation platform
|
|
272
|
-
- n8n community for inspiration and support
|
|
273
|
-
|
|
274
|
-
---
|
|
275
|
-
|
|
276
|
-
Made with ❤️ for the n8n community
|
|
1
|
+

|
|
2
|
+
|
|
3
|
+
# n8n Multiple Upload Request Node
|
|
4
|
+
|
|
5
|
+
Một n8n community node chuyên dụng để upload nhiều file nhị phân (binary files) động với khả năng lọc theo pattern và hỗ trợ authentication.
|
|
6
|
+
|
|
7
|
+
**Tiếng Việt** | [English](README_EN.md)
|
|
8
|
+
|
|
9
|
+
## Tính năng chính
|
|
10
|
+
|
|
11
|
+
✨ **Upload nhiều file động** - Tự động upload tất cả các file nhị phân từ input hoặc lọc theo pattern
|
|
12
|
+
|
|
13
|
+
🎯 **Lọc file theo pattern** - Hỗ trợ wildcard patterns (`*`, `?`) để chọn lọc file cần upload
|
|
14
|
+
|
|
15
|
+
🔐 **Authentication linh hoạt** - Hỗ trợ Bearer Token, Custom Header, hoặc không authentication
|
|
16
|
+
|
|
17
|
+
🔧 **Tùy chỉnh linh hoạt** - Thêm form fields, query parameters, custom headers
|
|
18
|
+
|
|
19
|
+
📡 **HTTP Methods** - Hỗ trợ POST, PUT, PATCH requests
|
|
20
|
+
|
|
21
|
+
⚡ **Xử lý lỗi mạnh mẽ** - Continue on fail, timeout configuration, SSL validation options
|
|
22
|
+
|
|
23
|
+
## Cài đặt
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
npm install n8n-nodes-multiple-upload-request
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Cách sử dụng
|
|
30
|
+
|
|
31
|
+
### 1. Thêm node vào workflow
|
|
32
|
+
Tìm kiếm **"Multiple Upload Request"** trong danh sách nodes của n8n.
|
|
33
|
+
|
|
34
|
+
### 2. Cấu hình cơ bản
|
|
35
|
+
|
|
36
|
+
**Authentication**: Chọn phương thức xác thực
|
|
37
|
+
- **None**: Không cần xác thực
|
|
38
|
+
- **Bearer Token**: Sử dụng Bearer token (cần credential)
|
|
39
|
+
- **Custom Header**: Sử dụng custom header authentication (cần credential)
|
|
40
|
+
|
|
41
|
+
**Request Method**: Chọn HTTP method (POST/PUT/PATCH)
|
|
42
|
+
|
|
43
|
+
**URL**: URL endpoint để upload file
|
|
44
|
+
|
|
45
|
+
**File Pattern**: Pattern để lọc file (mặc định: `*` - tất cả file)
|
|
46
|
+
- `*` - Upload tất cả file
|
|
47
|
+
- `*.jpg` - Chỉ upload file .jpg
|
|
48
|
+
- `image_*` - Upload file bắt đầu bằng "image_"
|
|
49
|
+
- `file_?.pdf` - Upload file như file_1.pdf, file_a.pdf
|
|
50
|
+
|
|
51
|
+
**Binary Property Name**: Tên property chứa binary data (mặc định: `data`)
|
|
52
|
+
- Có thể nhập nhiều property, phân cách bằng dấu phẩy: `data, file, attachment`
|
|
53
|
+
|
|
54
|
+
### 3. Tùy chọn nâng cao
|
|
55
|
+
|
|
56
|
+
#### Additional Form Fields
|
|
57
|
+
Thêm các field text vào form data cùng với file upload.
|
|
58
|
+
|
|
59
|
+
#### Query Parameters
|
|
60
|
+
Thêm query parameters vào URL request.
|
|
61
|
+
|
|
62
|
+
#### Additional Headers
|
|
63
|
+
Thêm custom headers vào request (ví dụ: Content-Type, X-Custom-Header).
|
|
64
|
+
|
|
65
|
+
#### Timeout
|
|
66
|
+
Cấu hình thời gian timeout cho request (mặc định: 10000ms).
|
|
67
|
+
|
|
68
|
+
#### Ignore SSL Issues
|
|
69
|
+
Bỏ qua lỗi SSL certificate validation (hữu ích cho môi trường development).
|
|
70
|
+
|
|
71
|
+
## Ví dụ sử dụng
|
|
72
|
+
|
|
73
|
+
### Ví dụ 1: Upload tất cả ảnh JPG
|
|
74
|
+
```
|
|
75
|
+
File Pattern: *.jpg
|
|
76
|
+
Binary Property Name: data
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Ví dụ 2: Upload nhiều file từ nhiều property
|
|
80
|
+
```
|
|
81
|
+
File Pattern: *
|
|
82
|
+
Binary Property Name: image, document, attachment
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Ví dụ 3: Upload với Bearer authentication
|
|
86
|
+
```
|
|
87
|
+
Authentication: Bearer Token
|
|
88
|
+
Request Method: POST
|
|
89
|
+
URL: https://api.example.com/upload
|
|
90
|
+
File Pattern: *
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Ví dụ 4: Upload với form fields bổ sung
|
|
94
|
+
```
|
|
95
|
+
Additional Form Fields:
|
|
96
|
+
- userId: 12345
|
|
97
|
+
- category: documents
|
|
98
|
+
- tags: important,urgent
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Pattern Matching
|
|
102
|
+
|
|
103
|
+
Node hỗ trợ wildcard patterns để lọc file:
|
|
104
|
+
|
|
105
|
+
- `*` - Khớp với bất kỳ ký tự nào (0 hoặc nhiều)
|
|
106
|
+
- `?` - Khớp với đúng 1 ký tự
|
|
107
|
+
- Pattern không phân biệt hoa thường
|
|
108
|
+
|
|
109
|
+
**Ví dụ patterns:**
|
|
110
|
+
- `*.pdf` → Tất cả file PDF
|
|
111
|
+
- `report_*.xlsx` → Các file Excel bắt đầu bằng "report_"
|
|
112
|
+
- `image_?.png` → image_1.png, image_a.png, image_x.png
|
|
113
|
+
- `2024-??-*.jpg` → 2024-01-photo.jpg, 2024-12-image.jpg
|
|
114
|
+
|
|
115
|
+
## Credentials
|
|
116
|
+
|
|
117
|
+
### Bearer Token Authentication
|
|
118
|
+
|
|
119
|
+
Để sử dụng Bearer Token authentication:
|
|
120
|
+
|
|
121
|
+
1. Tạo credential mới loại **Bearer Token Auth**
|
|
122
|
+
2. Nhập Bearer token của bạn
|
|
123
|
+
3. Chọn credential này trong node
|
|
124
|
+
|
|
125
|
+
### Custom Header Authentication
|
|
126
|
+
|
|
127
|
+
Để sử dụng Custom Header authentication:
|
|
128
|
+
|
|
129
|
+
1. Tạo credential mới loại **Custom Header Auth**
|
|
130
|
+
2. Nhập Header Name (ví dụ: `X-API-Key`, `Authorization`)
|
|
131
|
+
3. Nhập Header Value (giá trị của header)
|
|
132
|
+
4. Chọn credential này trong node
|
|
133
|
+
|
|
134
|
+
## API Response
|
|
135
|
+
|
|
136
|
+
Node trả về response JSON từ server:
|
|
137
|
+
|
|
138
|
+
```json
|
|
139
|
+
{
|
|
140
|
+
"success": true,
|
|
141
|
+
"message": "Files uploaded successfully",
|
|
142
|
+
"files": [
|
|
143
|
+
{
|
|
144
|
+
"filename": "image1.jpg",
|
|
145
|
+
"size": 102400,
|
|
146
|
+
"url": "https://example.com/uploads/image1.jpg"
|
|
147
|
+
}
|
|
148
|
+
]
|
|
149
|
+
}
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Xử lý lỗi
|
|
153
|
+
|
|
154
|
+
Node hỗ trợ Continue on Fail mode:
|
|
155
|
+
- Khi bật: Lỗi sẽ được trả về dưới dạng JSON và workflow tiếp tục
|
|
156
|
+
- Khi tắt: Lỗi sẽ dừng workflow
|
|
157
|
+
|
|
158
|
+
## Development
|
|
159
|
+
|
|
160
|
+
### Yêu cầu
|
|
161
|
+
|
|
162
|
+
- **[Node.js](https://nodejs.org/)** (v22 trở lên) và npm
|
|
163
|
+
- **[git](https://git-scm.com/downloads)**
|
|
164
|
+
|
|
165
|
+
### Clone và cài đặt
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
git clone https://github.com/OrgGem/n8n-nodes-multiple-upload-request.git
|
|
169
|
+
cd n8n-nodes-multiple-upload-request
|
|
170
|
+
npm install
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### Development mode
|
|
174
|
+
|
|
175
|
+
Chạy n8n với node được load và hot reload enabled:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
npm run dev
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Build
|
|
182
|
+
|
|
183
|
+
Build node cho production:
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
npm run build
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Lint và format
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
npm run lint
|
|
193
|
+
npm run lint:fix
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Testing
|
|
197
|
+
|
|
198
|
+
Xem [TESTING_GUIDE.md](TESTING_GUIDE.md) để biết chi tiết về các test scenarios và cách validate node.
|
|
199
|
+
|
|
200
|
+
## Use Cases
|
|
201
|
+
|
|
202
|
+
### 1. Upload ảnh từ form submission
|
|
203
|
+
Workflow nhận nhiều ảnh từ webhook form submission và upload lên cloud storage.
|
|
204
|
+
|
|
205
|
+
### 2. Batch upload documents
|
|
206
|
+
Upload hàng loạt documents từ một folder vào document management system.
|
|
207
|
+
|
|
208
|
+
### 3. Backup files
|
|
209
|
+
Định kỳ backup các file quan trọng lên remote storage với authentication.
|
|
210
|
+
|
|
211
|
+
### 4. Image processing pipeline
|
|
212
|
+
Upload ảnh đã xử lý (resize, watermark) lên CDN.
|
|
213
|
+
|
|
214
|
+
### 5. Multi-tenant file upload
|
|
215
|
+
Upload file của nhiều users khác nhau với dynamic authentication headers.
|
|
216
|
+
|
|
217
|
+
## Công nghệ sử dụng
|
|
218
|
+
|
|
219
|
+
- **TypeScript** - Type-safe development
|
|
220
|
+
- **n8n-workflow** - n8n SDK và types
|
|
221
|
+
- **Node.js** - Runtime environment
|
|
222
|
+
- **Multipart form-data** - File upload handling
|
|
223
|
+
|
|
224
|
+
## Cấu trúc thư mục
|
|
225
|
+
|
|
226
|
+
```
|
|
227
|
+
nodes/MultipleUploadRequest/
|
|
228
|
+
├── MultipleUploadRequest.node.ts # Main node implementation
|
|
229
|
+
├── MultipleUploadRequest.node.json # Node metadata
|
|
230
|
+
├── description.ts # UI property definitions
|
|
231
|
+
├── utils.ts # Wildcard pattern matching
|
|
232
|
+
├── upload.svg # Light mode icon
|
|
233
|
+
└── upload.dark.svg # Dark mode icon
|
|
234
|
+
|
|
235
|
+
credentials/
|
|
236
|
+
├── BearerTokenAuthApi.credentials.ts # Bearer token auth
|
|
237
|
+
└── CustomHeaderAuthApi.credentials.ts # Custom header auth
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
## Contributing
|
|
241
|
+
|
|
242
|
+
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
243
|
+
|
|
244
|
+
1. Fork the repository
|
|
245
|
+
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
|
|
246
|
+
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
|
|
247
|
+
4. Push to the branch (`git push origin feature/AmazingFeature`)
|
|
248
|
+
5. Open a Pull Request
|
|
249
|
+
|
|
250
|
+
## License
|
|
251
|
+
|
|
252
|
+
This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details.
|
|
253
|
+
|
|
254
|
+
## Support
|
|
255
|
+
|
|
256
|
+
- **Documentation**: [n8n docs](https://docs.n8n.io/)
|
|
257
|
+
- **Community**: [n8n community forum](https://community.n8n.io/)
|
|
258
|
+
- **Issues**: [GitHub Issues](https://github.com/OrgGem/n8n-nodes-multiple-upload-request/issues)
|
|
259
|
+
|
|
260
|
+
## Changelog
|
|
261
|
+
|
|
262
|
+
Xem [CHANGELOG.md](CHANGELOG.md) để biết lịch sử thay đổi.
|
|
263
|
+
|
|
264
|
+
## Author
|
|
265
|
+
|
|
266
|
+
**n8n Community**
|
|
267
|
+
- Email: community@n8n.io
|
|
268
|
+
|
|
269
|
+
## Acknowledgments
|
|
270
|
+
|
|
271
|
+
- n8n team for the excellent workflow automation platform
|
|
272
|
+
- n8n community for inspiration and support
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
Made with ❤️ for the n8n community
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IAuthenticateGeneric,
|
|
1
|
+
import type { IAuthenticateGeneric, ICredentialType, INodeProperties, Icon } from 'n8n-workflow';
|
|
2
2
|
export declare class BearerTokenAuthApi implements ICredentialType {
|
|
3
3
|
name: string;
|
|
4
4
|
displayName: string;
|
|
@@ -6,5 +6,4 @@ export declare class BearerTokenAuthApi implements ICredentialType {
|
|
|
6
6
|
icon: Icon;
|
|
7
7
|
properties: INodeProperties[];
|
|
8
8
|
authenticate: IAuthenticateGeneric;
|
|
9
|
-
test: ICredentialTestRequest;
|
|
10
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BearerTokenAuthApi.credentials.js","sourceRoot":"","sources":["../../credentials/BearerTokenAuthApi.credentials.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"BearerTokenAuthApi.credentials.js","sourceRoot":"","sources":["../../credentials/BearerTokenAuthApi.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,kBAAkB;IAA/B;QACC,SAAI,GAAG,oBAAoB,CAAC;QAC5B,gBAAW,GAAG,uBAAuB,CAAC;QACtC,qBAAgB,GAAG,sEAAsE,CAAC;QAC1F,SAAI,GAAS,gDAAgD,CAAC;QAC9D,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,qCAAqC;aAClD;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,gCAAgC;iBAC/C;aACD;SACD,CAAC;IACH,CAAC;CAAA;AAzBD,gDAyBC"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ICredentialType, INodeProperties, Icon } from 'n8n-workflow';
|
|
2
2
|
export declare class CustomHeaderAuthApi implements ICredentialType {
|
|
3
3
|
name: string;
|
|
4
4
|
displayName: string;
|
|
5
5
|
documentationUrl: string;
|
|
6
6
|
icon: Icon;
|
|
7
7
|
properties: INodeProperties[];
|
|
8
|
-
test: ICredentialTestRequest;
|
|
9
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomHeaderAuthApi.credentials.js","sourceRoot":"","sources":["../../credentials/CustomHeaderAuthApi.credentials.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"CustomHeaderAuthApi.credentials.js","sourceRoot":"","sources":["../../credentials/CustomHeaderAuthApi.credentials.ts"],"names":[],"mappings":";;;AAMA,MAAa,mBAAmB;IAAhC;QACC,SAAI,GAAG,qBAAqB,CAAC;QAC7B,gBAAW,GAAG,wBAAwB,CAAC;QACvC,qBAAgB,GAAG,sEAAsE,CAAC;QAC1F,SAAI,GAAS,gDAAgD,CAAC;QAC9D,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,aAAa;gBAC1B,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,WAAW;gBACpB,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,iDAAiD;aAC9D;YACD;gBACC,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,gCAAgC;aAC7C;SACD,CAAC;IACH,CAAC;CAAA;AAxBD,kDAwBC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
-
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.0165 0C8.94791 0 0 9.01388 0 20.1653C0 29.0792 5.73324 36.6246 13.6868 39.2952C14.6812 39.496 15.0454 38.8613 15.0454 38.3274C15.0454 37.8599 15.0126 36.2575 15.0126 34.5879C9.4445 35.79 8.28498 32.1841 8.28498 32.1841C7.39015 29.847 6.06429 29.2463 6.06429 29.2463C4.24185 28.011 6.19704 28.011 6.19704 28.011C8.21861 28.1446 9.27938 30.081 9.27938 30.081C11.0686 33.1522 13.9518 32.2844 15.1118 31.7502C15.2773 30.4481 15.8079 29.5467 16.3713 29.046C11.9303 28.5785 7.25781 26.8425 7.25781 19.0967C7.25781 16.8932 8.05267 15.0905 9.31216 13.6884C9.11344 13.1877 8.41732 11.1174 9.51128 8.34644C9.51128 8.34644 11.2014 7.81217 15.0122 10.4164C16.6438 9.97495 18.3263 9.7504 20.0165 9.74851C21.7067 9.74851 23.4295 9.98246 25.0205 10.4164C28.8317 7.81217 30.5218 8.34644 30.5218 8.34644C31.6158 11.1174 30.9192 13.1877 30.7205 13.6884C32.0132 15.0905 32.7753 16.8932 32.7753 19.0967C32.7753 26.8425 28.1028 28.5449 23.6287 29.046C24.358 29.6802 24.9873 30.882 24.9873 32.7851C24.9873 35.4893 24.9545 37.6596 24.9545 38.327C24.9545 38.8613 25.3192 39.496 26.3132 39.2956C34.2667 36.6242 39.9999 29.0792 39.9999 20.1653C40.0327 9.01388 31.052 0 20.0165 0Z" fill="white"/>
|
|
3
|
-
</svg>
|
|
1
|
+
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.0165 0C8.94791 0 0 9.01388 0 20.1653C0 29.0792 5.73324 36.6246 13.6868 39.2952C14.6812 39.496 15.0454 38.8613 15.0454 38.3274C15.0454 37.8599 15.0126 36.2575 15.0126 34.5879C9.4445 35.79 8.28498 32.1841 8.28498 32.1841C7.39015 29.847 6.06429 29.2463 6.06429 29.2463C4.24185 28.011 6.19704 28.011 6.19704 28.011C8.21861 28.1446 9.27938 30.081 9.27938 30.081C11.0686 33.1522 13.9518 32.2844 15.1118 31.7502C15.2773 30.4481 15.8079 29.5467 16.3713 29.046C11.9303 28.5785 7.25781 26.8425 7.25781 19.0967C7.25781 16.8932 8.05267 15.0905 9.31216 13.6884C9.11344 13.1877 8.41732 11.1174 9.51128 8.34644C9.51128 8.34644 11.2014 7.81217 15.0122 10.4164C16.6438 9.97495 18.3263 9.7504 20.0165 9.74851C21.7067 9.74851 23.4295 9.98246 25.0205 10.4164C28.8317 7.81217 30.5218 8.34644 30.5218 8.34644C31.6158 11.1174 30.9192 13.1877 30.7205 13.6884C32.0132 15.0905 32.7753 16.8932 32.7753 19.0967C32.7753 26.8425 28.1028 28.5449 23.6287 29.046C24.358 29.6802 24.9873 30.882 24.9873 32.7851C24.9873 35.4893 24.9545 37.6596 24.9545 38.327C24.9545 38.8613 25.3192 39.496 26.3132 39.2956C34.2667 36.6242 39.9999 29.0792 39.9999 20.1653C40.0327 9.01388 31.052 0 20.0165 0Z" fill="white"/>
|
|
3
|
+
</svg>
|