piclist 1.7.11 → 1.7.13

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/bin/picgo-server CHANGED
@@ -10,12 +10,12 @@ const os = require('os')
10
10
  const tempDir = path.join(os.homedir(), '.piclist', 'serverTemp')
11
11
  fs.ensureDirSync(tempDir)
12
12
 
13
+ const argv = minimist(process.argv.slice(2))
14
+
13
15
  let key = ''
14
16
  let defaultPort = 36677
15
17
  let defaultHost = '0.0.0.0'
16
18
 
17
- const argv = minimist(process.argv.slice(2))
18
-
19
19
  if (argv.h || argv.help) {
20
20
  showHelp()
21
21
  process.exit(0)
@@ -331,9 +331,72 @@ class Server {
331
331
  })
332
332
  }
333
333
  }
334
+ } else if (request.method === 'GET') {
335
+ response.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' })
336
+ response.write(`
337
+ <!DOCTYPE html>
338
+ <html lang="en">
339
+ <head>
340
+ <meta charset="UTF-8">
341
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
342
+ <title>Picgo-Server Usage</title>
343
+ <style>
344
+ body { font-family: Arial, sans-serif; margin: 20px; }
345
+ pre { background-color: #f4f4f4; padding: 10px; }
346
+ .tip { padding: 10px; background-color: #f0f9ff; border-left: 5px solid #2196F3; margin-bottom: 20px; }
347
+ </style>
348
+ </head>
349
+ <body>
350
+ <h2>picgo-server的使用</h2>
351
+ <p><code>picgo-server</code>命令用于启动web服务,接收来自其他应用或其他主机的HTTP请求来上传图片。</p>
352
+ <p>默认监听地址:<code>0.0.0.0</code>,默认监听端口:<code>36677</code></p>
353
+
354
+ <h3>接口鉴权</h3>
355
+ <p>当将接口暴露于公网时,为了防止恶意上传,可以使用接口鉴权功能。通过在运行<code>picgo-server</code>时添加<code>-k</code>或<code>--key</code>参数来设置一个密钥。</p>
356
+ <p>发送请求时添加URL查询参数<code>key</code>即可,例如:<code>http://xxx:36677/upload?key=xxx</code>。</p>
357
+
358
+ <h3>表单上传</h3>
359
+ <ul>
360
+ <li>请求方法: <code>POST</code></li>
361
+ <li>url: <code>http://127.0.0.1:36677/upload</code> (此处以默认配置为例)</li>
362
+ <li>请求body: <code>multipart/form-data</code>格式,key任选,value为图片文件</li>
363
+ </ul>
364
+
365
+ <h3>HTTP调用上传剪贴板图片</h3>
366
+ <ul>
367
+ <li>请求方法: <code>POST</code></li>
368
+ <li>url: <code>http://127.0.0.1:36677/upload</code> (此处以默认配置为例)</li>
369
+ <li>请求body: <code>{list: ['xxx.jpg']}</code> 必须是JSON格式</li>
370
+ </ul>
371
+
372
+ <div class="tip">Tip: PicList支持通过设置<code>picbed</code>和<code>configName</code>两个URL查询参数来指定上传图床和配置文件。例如:<code>http://127.0.0.1:36677/upload?picbed=aws-s3&configName=piclist-test</code> 该配置将会使用<code>aws-s3</code>图床,并且使用<code>piclist-test</code>配置文件。</div>
373
+
374
+ <p>返回的数据:</p>
375
+ <pre>{
376
+ "success": true, // or false
377
+ "result": ["url"]
378
+ }</pre>
379
+
380
+ <h3>HTTP调用上传具体路径图片</h3>
381
+ <ul>
382
+ <li>method: <code>POST</code></li>
383
+ <li>url: <code>http://127.0.0.1:36677/upload</code> (此处以默认配置为例)</li>
384
+ <li>request body: <code>{list: ['xxx.jpg']}</code> 必须是JSON格式</li>
385
+ </ul>
386
+
387
+ <p>返回的数据:</p>
388
+ <pre>{
389
+ "success": true, // or false
390
+ "result": ["url"]
391
+ }</pre>
392
+
393
+ </body>
394
+ </html>
395
+ `)
396
+ response.end()
334
397
  } else {
335
398
  console.log(`[PicList Server] don't support [${request.method}] method`)
336
- response.statusCode = 404
399
+ response.statusCode = 405
337
400
  response.end()
338
401
  }
339
402
  }
@@ -344,14 +407,18 @@ class Server {
344
407
  port = parseInt(port, 10)
345
408
  }
346
409
  this.httpServer.listen(port, defaultHost).on('error', async err => {
347
- if (err.errno === 'EADDRINUSE') {
410
+ if (err.code === 'EADDRINUSE') {
348
411
  try {
349
412
  await axios.post(ensureHTTPLink(`${defaultHost}:${port}/heartbeat`))
413
+ console.log(`[PicList Server] server is already running at ${port}, no need to start again`)
350
414
  this.shutdown(true)
351
415
  } catch (e) {
352
416
  console.log(`[PicList Server] ${port} is busy, trying with port ${port + 1}`)
353
417
  this.listen(port + 1)
354
418
  }
419
+ } else {
420
+ console.log(`[PicList Server] failed to start server at ${port}`)
421
+ console.log(`[PicList Server] ${err}`)
355
422
  }
356
423
  })
357
424
  }
@@ -369,7 +436,6 @@ class Server {
369
436
  }
370
437
 
371
438
  restart() {
372
- this.config = picgo.getConfig('settings.server')
373
439
  this.shutdown()
374
440
  this.startup()
375
441
  }