w-ftp 1.0.0 → 1.0.3
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/README.md +75 -57
- package/dist/w-ftp.umd.js +7 -0
- package/dist/w-ftp.umd.js.map +1 -0
- package/docs/WFtp.mjs.html +495 -36
- package/docs/global.html +1799 -30
- package/docs/index.html +2 -2
- package/docs/jsftp.js.html +2 -2
- package/g-download.mjs +1 -0
- package/g-upload.mjs +1 -0
- package/package.json +9 -3
- package/src/WFtp.mjs +493 -34
- package/toolg/gDistRollup.mjs +21 -5
package/docs/index.html
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
|
|
28
28
|
<nav >
|
|
29
29
|
|
|
30
|
-
<h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#WFtp">WFtp</a></li></ul>
|
|
30
|
+
<h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#ftpCheckFile">ftpCheckFile</a></li><li><a href="global.html#ftpConn">ftpConn</a></li><li><a href="global.html#ftpDownload">ftpDownload</a></li><li><a href="global.html#ftpLs">ftpLs</a></li><li><a href="global.html#ftpQuit">ftpQuit</a></li><li><a href="global.html#ftpStateFile">ftpStateFile</a></li><li><a href="global.html#ftpSyncToLocal">ftpSyncToLocal</a></li><li><a href="global.html#ftpSyncToRemote">ftpSyncToRemote</a></li><li><a href="global.html#ftpUpload">ftpUpload</a></li><li><a href="global.html#WFtp">WFtp</a></li></ul>
|
|
31
31
|
</nav>
|
|
32
32
|
|
|
33
33
|
<div id="main">
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
<br class="clear">
|
|
69
69
|
|
|
70
70
|
<footer>
|
|
71
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.10</a> on Sat Jul 23 2022
|
|
71
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.10</a> on Sat Jul 23 2022 21:57:53 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
72
72
|
</footer>
|
|
73
73
|
|
|
74
74
|
<script>prettyPrint();</script>
|
package/docs/jsftp.js.html
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
|
|
28
28
|
<nav >
|
|
29
29
|
|
|
30
|
-
<h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#WFtp">WFtp</a></li></ul>
|
|
30
|
+
<h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#ftpCheckFile">ftpCheckFile</a></li><li><a href="global.html#ftpConn">ftpConn</a></li><li><a href="global.html#ftpDownload">ftpDownload</a></li><li><a href="global.html#ftpLs">ftpLs</a></li><li><a href="global.html#ftpQuit">ftpQuit</a></li><li><a href="global.html#ftpStateFile">ftpStateFile</a></li><li><a href="global.html#ftpSyncToLocal">ftpSyncToLocal</a></li><li><a href="global.html#ftpSyncToRemote">ftpSyncToRemote</a></li><li><a href="global.html#ftpUpload">ftpUpload</a></li><li><a href="global.html#WFtp">WFtp</a></li></ul>
|
|
31
31
|
</nav>
|
|
32
32
|
|
|
33
33
|
<div id="main">
|
|
@@ -912,7 +912,7 @@ module.exports = Ftp
|
|
|
912
912
|
<br class="clear">
|
|
913
913
|
|
|
914
914
|
<footer>
|
|
915
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.10</a> on Sat Jul 23 2022
|
|
915
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.10</a> on Sat Jul 23 2022 21:57:53 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
916
916
|
</footer>
|
|
917
917
|
|
|
918
918
|
<script>prettyPrint();</script>
|
package/g-download.mjs
CHANGED
package/g-upload.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "w-ftp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"main": "dist/w-ftp.umd.js",
|
|
5
5
|
"dependencies": {
|
|
6
|
+
"debug": "^4.3.4",
|
|
7
|
+
"ftp-response-parser": "^1.0.1",
|
|
8
|
+
"once": "^1.4.0",
|
|
9
|
+
"parse-listing": "^1.1.3",
|
|
10
|
+
"stream-combiner": "^0.2.2",
|
|
11
|
+
"unorm": "^1.6.0",
|
|
6
12
|
"lodash": "^4.17.21",
|
|
7
|
-
"wsemi": "^1.6.
|
|
13
|
+
"wsemi": "^1.6.69"
|
|
8
14
|
},
|
|
9
15
|
"devDependencies": {
|
|
10
16
|
"w-package-tools": "^1.0.65"
|
|
@@ -27,4 +33,4 @@
|
|
|
27
33
|
],
|
|
28
34
|
"author": "yuda-lyu(semisphere)",
|
|
29
35
|
"license": "MIT"
|
|
30
|
-
}
|
|
36
|
+
}
|
package/src/WFtp.mjs
CHANGED
|
@@ -20,55 +20,513 @@ import fsTreeFolder from 'wsemi/src/fsTreeFolder.mjs'
|
|
|
20
20
|
import fsIsFolder from 'wsemi/src/fsIsFolder.mjs'
|
|
21
21
|
import fsIsFile from 'wsemi/src/fsIsFile.mjs'
|
|
22
22
|
import fsCreateFolder from 'wsemi/src/fsCreateFolder.mjs'
|
|
23
|
-
// import Jsftp from 'jsftp'
|
|
24
23
|
import Jsftp from './jsftp.js'
|
|
25
|
-
console.log('Jsftp', Jsftp)
|
|
26
24
|
|
|
27
25
|
|
|
28
26
|
/**
|
|
29
|
-
*
|
|
27
|
+
* 連線至FPT伺服器
|
|
30
28
|
*
|
|
31
|
-
* @param {String} fp 輸入檔案路徑字串
|
|
32
29
|
* @param {Object} [opt={}] 輸入設定物件,預設{}
|
|
33
|
-
* @param {String}
|
|
34
|
-
* @
|
|
30
|
+
* @param {String} opt.hostname='' 輸入hostname字串
|
|
31
|
+
* @param {Number} opt.port='' 輸入port正整數
|
|
32
|
+
* @param {String} opt.username='' 輸入帳號字串
|
|
33
|
+
* @param {String} opt.password='' 輸入密碼字串
|
|
34
|
+
* @return {Promise} 回傳Promise,resolve回傳成功訊息,reject回傳錯誤訊息
|
|
35
35
|
* @example
|
|
36
36
|
* import WFtp from './src/WFtp.mjs'
|
|
37
37
|
*
|
|
38
38
|
* async function test() {
|
|
39
|
+
* let r
|
|
39
40
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* //
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
|
|
62
|
-
|
|
41
|
+
* let ftp = WFtp()
|
|
42
|
+
* // console.log('ftp', ftp)
|
|
43
|
+
*
|
|
44
|
+
* await ftp.conn({
|
|
45
|
+
* hostname: st.up.hostname,
|
|
46
|
+
* port: st.up.port,
|
|
47
|
+
* username: st.up.username,
|
|
48
|
+
* password: st.up.password,
|
|
49
|
+
* })
|
|
50
|
+
*
|
|
51
|
+
* //actions
|
|
52
|
+
*
|
|
53
|
+
* r = await ftp.quit()
|
|
54
|
+
* console.log('ftp.quit', r)
|
|
55
|
+
*
|
|
56
|
+
* }
|
|
57
|
+
* test()
|
|
58
|
+
* .catch((err) => {
|
|
59
|
+
* console.log(err)
|
|
60
|
+
* })
|
|
61
|
+
*
|
|
62
|
+
*/
|
|
63
|
+
async function ftpConn(opt = {}) {
|
|
64
|
+
return null
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* 遍歷伺服器上指定資料夾內檔案清單資訊
|
|
70
|
+
*
|
|
71
|
+
* @param {String} opt.fdRemote 輸入伺服器上指定資料夾字串
|
|
72
|
+
* @return {Promise} 回傳Promise,resolve回傳檔案清單資訊,reject回傳錯誤訊息
|
|
73
|
+
* @example
|
|
74
|
+
* import WFtp from './src/WFtp.mjs'
|
|
75
|
+
*
|
|
76
|
+
* async function test() {
|
|
77
|
+
* let r
|
|
78
|
+
*
|
|
79
|
+
* let ftp = WFtp()
|
|
80
|
+
* // console.log('ftp', ftp)
|
|
81
|
+
*
|
|
82
|
+
* await ftp.conn({
|
|
83
|
+
* hostname: st.up.hostname,
|
|
84
|
+
* port: st.up.port,
|
|
85
|
+
* username: st.up.username,
|
|
86
|
+
* password: st.up.password,
|
|
87
|
+
* })
|
|
88
|
+
*
|
|
89
|
+
* let fps = await ftp.ls('.')
|
|
90
|
+
* console.log('ftp.ls', fps[0], fps.length)
|
|
91
|
+
*
|
|
92
|
+
* r = await ftp.quit()
|
|
93
|
+
* console.log('ftp.quit', r)
|
|
94
|
+
*
|
|
95
|
+
* }
|
|
96
|
+
* test()
|
|
97
|
+
* .catch((err) => {
|
|
98
|
+
* console.log(err)
|
|
99
|
+
* })
|
|
100
|
+
*
|
|
101
|
+
*/
|
|
102
|
+
async function ftpLs(fdRemote = '.') {
|
|
103
|
+
return null
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* 關閉與伺服器連線
|
|
109
|
+
*
|
|
110
|
+
* @return {Promise} 回傳Promise,resolve回傳成功訊息,reject回傳錯誤訊息
|
|
111
|
+
* @example
|
|
112
|
+
* import WFtp from './src/WFtp.mjs'
|
|
113
|
+
*
|
|
114
|
+
* async function test() {
|
|
115
|
+
* let r
|
|
116
|
+
*
|
|
117
|
+
* let ftp = WFtp()
|
|
118
|
+
* // console.log('ftp', ftp)
|
|
119
|
+
*
|
|
120
|
+
* await ftp.conn({
|
|
121
|
+
* hostname: st.up.hostname,
|
|
122
|
+
* port: st.up.port,
|
|
123
|
+
* username: st.up.username,
|
|
124
|
+
* password: st.up.password,
|
|
125
|
+
* })
|
|
126
|
+
*
|
|
127
|
+
* //actions
|
|
128
|
+
*
|
|
129
|
+
* r = await ftp.quit()
|
|
130
|
+
* console.log('ftp.quit', r)
|
|
131
|
+
*
|
|
132
|
+
* }
|
|
133
|
+
* test()
|
|
134
|
+
* .catch((err) => {
|
|
135
|
+
* console.log(err)
|
|
136
|
+
* })
|
|
137
|
+
*/
|
|
138
|
+
async function ftpQuit() {
|
|
139
|
+
return null
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* 取得伺服器指定檔案資訊
|
|
145
|
+
*
|
|
146
|
+
* @param {String} opt.fpRemote 輸入伺服器上指定檔案字串
|
|
147
|
+
* @return {Promise} 回傳Promise,resolve回傳檔案資訊,reject回傳錯誤訊息
|
|
148
|
+
* @example
|
|
149
|
+
* import WFtp from './src/WFtp.mjs'
|
|
150
|
+
*
|
|
151
|
+
* async function test() {
|
|
152
|
+
* let r
|
|
153
|
+
*
|
|
154
|
+
* let ftp = WFtp()
|
|
155
|
+
* // console.log('ftp', ftp)
|
|
156
|
+
*
|
|
157
|
+
* await ftp.conn({
|
|
158
|
+
* hostname: st.up.hostname,
|
|
159
|
+
* port: st.up.port,
|
|
160
|
+
* username: st.up.username,
|
|
161
|
+
* password: st.up.password,
|
|
162
|
+
* })
|
|
163
|
+
*
|
|
164
|
+
* r = await ftp.stateFile('./_test_upload_client/DECL_20210805055044.csv')
|
|
165
|
+
* console.log('ftp.stateFile', r)
|
|
166
|
+
*
|
|
167
|
+
* r = await ftp.quit()
|
|
168
|
+
* console.log('ftp.quit', r)
|
|
63
169
|
*
|
|
64
170
|
* }
|
|
65
171
|
* test()
|
|
66
172
|
* .catch((err) => {
|
|
67
|
-
* console.log(
|
|
173
|
+
* console.log(err)
|
|
174
|
+
* })
|
|
175
|
+
*/
|
|
176
|
+
async function ftpStateFile(fpRemote) {
|
|
177
|
+
return null
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* 確認伺服器指定檔案是否存在
|
|
183
|
+
*
|
|
184
|
+
* @param {String} opt.fpRemote 輸入伺服器上指定檔案字串
|
|
185
|
+
* @return {Promise} 回傳Promise,resolve回傳指定檔案是否存在布林值,reject回傳錯誤訊息
|
|
186
|
+
* @example
|
|
187
|
+
* import WFtp from './src/WFtp.mjs'
|
|
188
|
+
*
|
|
189
|
+
* async function test() {
|
|
190
|
+
* let r
|
|
191
|
+
*
|
|
192
|
+
* let ftp = WFtp()
|
|
193
|
+
* // console.log('ftp', ftp)
|
|
194
|
+
*
|
|
195
|
+
* await ftp.conn({
|
|
196
|
+
* hostname: st.up.hostname,
|
|
197
|
+
* port: st.up.port,
|
|
198
|
+
* username: st.up.username,
|
|
199
|
+
* password: st.up.password,
|
|
68
200
|
* })
|
|
69
201
|
*
|
|
202
|
+
* r = await ftp.checkFile('./_test_upload_client/DECL_20210805055044.csv')
|
|
203
|
+
* console.log('ftp.checkFile', r)
|
|
204
|
+
*
|
|
205
|
+
* r = await ftp.quit()
|
|
206
|
+
* console.log('ftp.quit', r)
|
|
207
|
+
*
|
|
208
|
+
* }
|
|
209
|
+
* test()
|
|
210
|
+
* .catch((err) => {
|
|
211
|
+
* console.log(err)
|
|
212
|
+
* })
|
|
213
|
+
*/
|
|
214
|
+
async function ftpCheckFile(fpRemote) {
|
|
215
|
+
return null
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* 下載伺服器指定檔案至本機
|
|
221
|
+
*
|
|
222
|
+
* @param {String} opt.fpRemote 輸入伺服器上指定檔案字串
|
|
223
|
+
* @param {String} opt.fpLocal 輸入本機指定檔案字串
|
|
224
|
+
* @param {Function} [opt.cbProcess=null] 輸入回調進度函數
|
|
225
|
+
* @return {Promise} 回傳Promise,resolve回傳成功訊息,reject回傳錯誤訊息
|
|
226
|
+
* @example
|
|
227
|
+
* import WFtp from './src/WFtp.mjs'
|
|
228
|
+
*
|
|
229
|
+
* async function test() {
|
|
230
|
+
* let r
|
|
231
|
+
*
|
|
232
|
+
* let ftp = WFtp()
|
|
233
|
+
* // console.log('ftp', ftp)
|
|
234
|
+
*
|
|
235
|
+
* await ftp.conn({
|
|
236
|
+
* hostname: st.up.hostname,
|
|
237
|
+
* port: st.up.port,
|
|
238
|
+
* username: st.up.username,
|
|
239
|
+
* password: st.up.password,
|
|
240
|
+
* })
|
|
241
|
+
*
|
|
242
|
+
* r = await ftp.download('./DECL_20210805055044.csv', './_test_download_client/DECL_20210805055044.csv', (p) => {
|
|
243
|
+
* console.log('ftp.download p', p.name, p.progress)
|
|
244
|
+
* })
|
|
245
|
+
* console.log('ftp.download', r)
|
|
246
|
+
*
|
|
247
|
+
* r = await ftp.quit()
|
|
248
|
+
* console.log('ftp.quit', r)
|
|
249
|
+
*
|
|
250
|
+
* }
|
|
251
|
+
* test()
|
|
252
|
+
* .catch((err) => {
|
|
253
|
+
* console.log(err)
|
|
254
|
+
* })
|
|
255
|
+
*/
|
|
256
|
+
async function ftpDownload(fpRemote, fpLocal, cbProcess = null) {
|
|
257
|
+
return null
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* 上傳本機指定檔案至伺服器
|
|
263
|
+
*
|
|
264
|
+
* @param {String} opt.fpLocal 輸入本機指定檔案字串
|
|
265
|
+
* @param {String} opt.fpRemote 輸入伺服器上指定檔案字串
|
|
266
|
+
* @param {Function} [opt.cbProcess=null] 輸入回調進度函數
|
|
267
|
+
* @return {Promise} 回傳Promise,resolve回傳成功訊息,reject回傳錯誤訊息
|
|
268
|
+
* @example
|
|
269
|
+
* import WFtp from './src/WFtp.mjs'
|
|
270
|
+
*
|
|
271
|
+
* async function test() {
|
|
272
|
+
* let r
|
|
273
|
+
*
|
|
274
|
+
* let ftp = WFtp()
|
|
275
|
+
* // console.log('ftp', ftp)
|
|
276
|
+
*
|
|
277
|
+
* await ftp.conn({
|
|
278
|
+
* hostname: st.up.hostname,
|
|
279
|
+
* port: st.up.port,
|
|
280
|
+
* username: st.up.username,
|
|
281
|
+
* password: st.up.password,
|
|
282
|
+
* })
|
|
283
|
+
*
|
|
284
|
+
* r = await ftp.upload('./_test_upload_client/DECL_20210805055044.csv', './DECL_20210805055044.csv', (p) => {
|
|
285
|
+
* console.log('ftp.upload p', p.name, p.progress)
|
|
286
|
+
* })
|
|
287
|
+
* console.log('ftp.upload', r)
|
|
288
|
+
*
|
|
289
|
+
* r = await ftp.quit()
|
|
290
|
+
* console.log('ftp.quit', r)
|
|
291
|
+
*
|
|
292
|
+
* }
|
|
293
|
+
* test()
|
|
294
|
+
* .catch((err) => {
|
|
295
|
+
* console.log(err)
|
|
296
|
+
* })
|
|
297
|
+
*/
|
|
298
|
+
async function ftpUpload(fpLocal, fpRemote, cbProcess) {
|
|
299
|
+
return null
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* 同步伺服器上指定資料夾內檔案至本機
|
|
305
|
+
*
|
|
306
|
+
* @param {String} opt.fdRemote 輸入伺服器上指定資料夾字串
|
|
307
|
+
* @param {String} opt.fdLocal 輸入本機指定資料夾字串
|
|
308
|
+
* @param {Function} [opt.cbProcess=null] 輸入回調進度函數
|
|
309
|
+
* @return {Promise} 回傳Promise,resolve回傳成功訊息,reject回傳錯誤訊息
|
|
310
|
+
* @example
|
|
311
|
+
* import WFtp from './src/WFtp.mjs'
|
|
312
|
+
*
|
|
313
|
+
* async function test() {
|
|
314
|
+
* let r
|
|
315
|
+
*
|
|
316
|
+
* let ftp = WFtp()
|
|
317
|
+
* // console.log('ftp', ftp)
|
|
318
|
+
*
|
|
319
|
+
* await ftp.conn({
|
|
320
|
+
* hostname: st.up.hostname,
|
|
321
|
+
* port: st.up.port,
|
|
322
|
+
* username: st.up.username,
|
|
323
|
+
* password: st.up.password,
|
|
324
|
+
* })
|
|
325
|
+
*
|
|
326
|
+
* r = await ftp.syncToLocal('.', './_test_download_client', (p) => {
|
|
327
|
+
* console.log('ftp.syncToLocal p', p.name, p.progress)
|
|
328
|
+
* })
|
|
329
|
+
* console.log('ftp.syncToLocal', r)
|
|
330
|
+
*
|
|
331
|
+
* r = await ftp.quit()
|
|
332
|
+
* console.log('ftp.quit', r)
|
|
333
|
+
*
|
|
334
|
+
* }
|
|
335
|
+
* test()
|
|
336
|
+
* .catch((err) => {
|
|
337
|
+
* console.log(err)
|
|
338
|
+
* })
|
|
339
|
+
*/
|
|
340
|
+
async function ftpSyncToLocal(fdRemote, fdLocal, cbProcess) {
|
|
341
|
+
return null
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
/**
|
|
346
|
+
* 同步本機指定資料夾內檔案至伺服器
|
|
347
|
+
*
|
|
348
|
+
* @param {String} opt.fdLocal 輸入本機指定資料夾字串
|
|
349
|
+
* @param {String} opt.fdRemote 輸入伺服器上指定資料夾字串
|
|
350
|
+
* @param {Function} [opt.cbProcess=null] 輸入回調進度函數
|
|
351
|
+
* @return {Promise} 回傳Promise,resolve回傳成功訊息,reject回傳錯誤訊息
|
|
352
|
+
* @example
|
|
353
|
+
* import WFtp from './src/WFtp.mjs'
|
|
354
|
+
*
|
|
355
|
+
* async function test() {
|
|
356
|
+
* let r
|
|
357
|
+
*
|
|
358
|
+
* let ftp = WFtp()
|
|
359
|
+
* // console.log('ftp', ftp)
|
|
360
|
+
*
|
|
361
|
+
* await ftp.conn({
|
|
362
|
+
* hostname: st.up.hostname,
|
|
363
|
+
* port: st.up.port,
|
|
364
|
+
* username: st.up.username,
|
|
365
|
+
* password: st.up.password,
|
|
366
|
+
* })
|
|
367
|
+
*
|
|
368
|
+
* r = await ftp.syncToRemote('./_test_upload_client', '.', (p) => {
|
|
369
|
+
* console.log('ftp.syncToRemote p', p.name, p.progress)
|
|
370
|
+
* })
|
|
371
|
+
* console.log('ftp.syncToRemote', r)
|
|
372
|
+
*
|
|
373
|
+
* r = await ftp.quit()
|
|
374
|
+
* console.log('ftp.quit', r)
|
|
375
|
+
*
|
|
376
|
+
* }
|
|
377
|
+
* test()
|
|
378
|
+
* .catch((err) => {
|
|
379
|
+
* console.log(err)
|
|
380
|
+
* })
|
|
381
|
+
*/
|
|
382
|
+
async function ftpSyncToRemote(fdLocal, fdRemote, cbProcess) {
|
|
383
|
+
return null
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* 操作FTP,包含連線、下載、資料夾內檔案同步下載、上傳、資料夾內檔案同步上傳等功能
|
|
389
|
+
*
|
|
390
|
+
* @returns {Object} 回傳FTP操作物件,包含conn、ls、stateFile、checkFile、download、syncToLocal、syncToRemote、upload、quit。
|
|
391
|
+
* @example
|
|
392
|
+
* import WFtp from './src/WFtp.mjs'
|
|
393
|
+
*
|
|
394
|
+
* async function test_up() {
|
|
395
|
+
* let r
|
|
396
|
+
*
|
|
397
|
+
* let ftp = WFtp()
|
|
398
|
+
* // console.log('ftp', ftp)
|
|
399
|
+
*
|
|
400
|
+
* await ftp.conn({
|
|
401
|
+
* hostname: `{hostname}`,
|
|
402
|
+
* port: `{port}`,
|
|
403
|
+
* username: `{username}`,
|
|
404
|
+
* password: `{password}`,
|
|
405
|
+
* })
|
|
406
|
+
*
|
|
407
|
+
* let fps = await ftp.ls('.')
|
|
408
|
+
* console.log('ftp.ls', fps[0], fps.length)
|
|
409
|
+
*
|
|
410
|
+
* r = await ftp.upload('./_test_upload_client/DECL_20210805055044.csv', './DECL_20210805055044.csv', (p) => {
|
|
411
|
+
* console.log('ftp.upload p', p.name, p.progress)
|
|
412
|
+
* })
|
|
413
|
+
* console.log('ftp.upload', r)
|
|
414
|
+
*
|
|
415
|
+
* r = await ftp.syncToRemote('./_test_upload_client', '.', (p) => {
|
|
416
|
+
* console.log('ftp.syncToRemote p', p.name, p.progress)
|
|
417
|
+
* })
|
|
418
|
+
* console.log('ftp.syncToRemote', r)
|
|
419
|
+
*
|
|
420
|
+
* r = await ftp.quit()
|
|
421
|
+
* console.log('ftp.quit', r)
|
|
422
|
+
*
|
|
423
|
+
* }
|
|
424
|
+
* test_up()
|
|
425
|
+
* .catch((err) => {
|
|
426
|
+
* console.log(err)
|
|
427
|
+
* })
|
|
428
|
+
* // ftp.ls {
|
|
429
|
+
* // name: 'DECL_202108.csv',
|
|
430
|
+
* // type: 0,
|
|
431
|
+
* // time: 1658366760000,
|
|
432
|
+
* // size: '218690',
|
|
433
|
+
* // owner: 'ftp',
|
|
434
|
+
* // group: 'ftp',
|
|
435
|
+
* // userPermissions: { read: true, write: true, exec: false },
|
|
436
|
+
* // groupPermissions: { read: true, write: true, exec: false },
|
|
437
|
+
* // otherPermissions: { read: true, write: true, exec: false }
|
|
438
|
+
* // } 73
|
|
439
|
+
* // ftp.upload p DECL_20210805055044.csv 75.71339448693362
|
|
440
|
+
* // drain
|
|
441
|
+
* // ftp.upload p DECL_20210805055044.csv 100
|
|
442
|
+
* // ftp.upload ok
|
|
443
|
+
* // ftp.syncToRemote { num: 0, files: [] }
|
|
444
|
+
* // ftp.quit { code: 221, text: '221 Goodbye.', isMark: false, isError: false }
|
|
445
|
+
*
|
|
446
|
+
* async function test_dw() {
|
|
447
|
+
* let r
|
|
448
|
+
*
|
|
449
|
+
* let ftp = WFtp()
|
|
450
|
+
* // console.log('ftp', ftp)
|
|
451
|
+
*
|
|
452
|
+
* await ftp.conn({
|
|
453
|
+
* hostname: `{hostname}`,
|
|
454
|
+
* port: `{port}`,
|
|
455
|
+
* username: `{username}`,
|
|
456
|
+
* password: `{password}`,
|
|
457
|
+
* })
|
|
458
|
+
*
|
|
459
|
+
* let fps = await ftp.ls('.')
|
|
460
|
+
* console.log('ftp.ls', fps[0], fps.length)
|
|
461
|
+
*
|
|
462
|
+
* r = await ftp.download('./DECL_20210805055044.csv', './_test_download_client/DECL_20210805055044.csv', (p) => {
|
|
463
|
+
* console.log('ftp.download p', p.name, p.progress)
|
|
464
|
+
* })
|
|
465
|
+
* console.log('ftp.download', r)
|
|
466
|
+
*
|
|
467
|
+
* r = await ftp.syncToLocal('.', './_test_download_client', (p) => {
|
|
468
|
+
* console.log('ftp.syncToLocal p', p.name, p.progress)
|
|
469
|
+
* })
|
|
470
|
+
* console.log('ftp.syncToLocal', r)
|
|
471
|
+
*
|
|
472
|
+
* r = await ftp.quit()
|
|
473
|
+
* console.log('ftp.quit', r)
|
|
474
|
+
*
|
|
475
|
+
* }
|
|
476
|
+
* test_dw()
|
|
477
|
+
* .catch((err) => {
|
|
478
|
+
* console.log(err)
|
|
479
|
+
* })
|
|
480
|
+
* // ftp.ls {
|
|
481
|
+
* // name: 'DECL_202108.csv',
|
|
482
|
+
* // type: 0,
|
|
483
|
+
* // time: 1658302140000,
|
|
484
|
+
* // size: '218690',
|
|
485
|
+
* // owner: 'ftp',
|
|
486
|
+
* // group: 'ftp',
|
|
487
|
+
* // userPermissions: { read: true, write: true, exec: false },
|
|
488
|
+
* // groupPermissions: { read: true, write: true, exec: false },
|
|
489
|
+
* // otherPermissions: { read: true, write: true, exec: false }
|
|
490
|
+
* // } 74
|
|
491
|
+
* // ftp.download p DECL_20210805055044.csv 4.7320871554333515
|
|
492
|
+
* // ftp.download p DECL_20210805055044.csv 9.464174310866703
|
|
493
|
+
* // ftp.download p DECL_20210805055044.csv 14.196261466300053
|
|
494
|
+
* // ftp.download p DECL_20210805055044.csv 18.928348621733406
|
|
495
|
+
* // ftp.download p DECL_20210805055044.csv 23.660435777166754
|
|
496
|
+
* // ftp.download p DECL_20210805055044.csv 28.392522932600105
|
|
497
|
+
* // ftp.download p DECL_20210805055044.csv 33.12461008803346
|
|
498
|
+
* // ftp.download p DECL_20210805055044.csv 37.85669724346681
|
|
499
|
+
* // ftp.download p DECL_20210805055044.csv 42.58878439890016
|
|
500
|
+
* // ftp.download p DECL_20210805055044.csv 47.32087155433351
|
|
501
|
+
* // ftp.download p DECL_20210805055044.csv 52.05295870976686
|
|
502
|
+
* // ftp.download p DECL_20210805055044.csv 56.78504586520021
|
|
503
|
+
* // ftp.download p DECL_20210805055044.csv 61.517133020633565
|
|
504
|
+
* // ftp.download p DECL_20210805055044.csv 66.24922017606691
|
|
505
|
+
* // ftp.download p DECL_20210805055044.csv 70.98130733150026
|
|
506
|
+
* // ftp.download p DECL_20210805055044.csv 75.71339448693362
|
|
507
|
+
* // ftp.download p DECL_20210805055044.csv 80.44548164236697
|
|
508
|
+
* // ftp.download p DECL_20210805055044.csv 85.17756879780032
|
|
509
|
+
* // ftp.download p DECL_20210805055044.csv 89.90965595323367
|
|
510
|
+
* // ftp.download p DECL_20210805055044.csv 94.64174310866701
|
|
511
|
+
* // ftp.download p DECL_20210805055044.csv 99.37383026410038
|
|
512
|
+
* // ftp.download p DECL_20210805055044.csv 100
|
|
513
|
+
* // ftp.download ok
|
|
514
|
+
* // ftp.syncToLocal { num: 0, files: [] }
|
|
515
|
+
* // ftp.quit { code: 221, text: '221 Goodbye.', isMark: false, isError: false }
|
|
516
|
+
*
|
|
70
517
|
*/
|
|
71
518
|
function WFtp() {
|
|
519
|
+
let doc = {
|
|
520
|
+
doc_ftpConn: ftpConn,
|
|
521
|
+
doc_ftpLs: ftpLs,
|
|
522
|
+
doc_ftpQuit: ftpQuit,
|
|
523
|
+
doc_ftpStateFile: ftpStateFile,
|
|
524
|
+
doc_ftpCheckFile: ftpCheckFile,
|
|
525
|
+
doc_ftpDownload: ftpDownload,
|
|
526
|
+
doc_ftpUpload: ftpUpload,
|
|
527
|
+
doc_ftpSyncToLocal: ftpSyncToLocal,
|
|
528
|
+
doc_ftpSyncToRemote: ftpSyncToRemote,
|
|
529
|
+
}
|
|
72
530
|
|
|
73
531
|
function WFtpCore() {
|
|
74
532
|
let Ftp = null
|
|
@@ -110,11 +568,12 @@ function WFtp() {
|
|
|
110
568
|
|
|
111
569
|
try {
|
|
112
570
|
Ftp = new Jsftp({
|
|
113
|
-
host: hostname,
|
|
571
|
+
host: hostname, //hostname or ip
|
|
114
572
|
port, // defaults to 21
|
|
115
573
|
user: username, // defaults to "anonymous"
|
|
116
574
|
pass: password, // defaults to "@anonymous"
|
|
117
575
|
})
|
|
576
|
+
Ftp.__doc__ = doc
|
|
118
577
|
pm.resolve('ok')
|
|
119
578
|
}
|
|
120
579
|
catch (err) {
|
|
@@ -125,7 +584,7 @@ function WFtp() {
|
|
|
125
584
|
}
|
|
126
585
|
|
|
127
586
|
|
|
128
|
-
async function ftpLs(
|
|
587
|
+
async function ftpLs(fdRemote = '.') {
|
|
129
588
|
|
|
130
589
|
//pm
|
|
131
590
|
let pm = genPm()
|
|
@@ -136,7 +595,7 @@ function WFtp() {
|
|
|
136
595
|
return pm
|
|
137
596
|
}
|
|
138
597
|
|
|
139
|
-
Ftp.ls(
|
|
598
|
+
Ftp.ls(fdRemote, (err, res) => {
|
|
140
599
|
if (err) {
|
|
141
600
|
pm.reject(err)
|
|
142
601
|
}
|
|
@@ -205,7 +664,7 @@ function WFtp() {
|
|
|
205
664
|
}
|
|
206
665
|
|
|
207
666
|
|
|
208
|
-
async function ftpDownload(fpRemote, fpLocal, cbProcess) {
|
|
667
|
+
async function ftpDownload(fpRemote, fpLocal, cbProcess = null) {
|
|
209
668
|
|
|
210
669
|
//pm
|
|
211
670
|
let pm = genPm()
|