Răsfoiți Sursa

增加图片下载功能的异常处理选择,开始下载任务前可以选择异常终止还是跳过

luoshi 5 ani în urmă
părinte
comite
e4430ba6d3
4 a modificat fișierele cu 48 adăugiri și 11 ștergeri
  1. 2 1
      README.md
  2. 29 8
      source/lib/image.js
  3. 2 2
      source/view/image-download.html
  4. 15 0
      source/view/image.html

+ 2 - 1
README.md

@@ -3,4 +3,5 @@ npm install --save
 打包命令
 打包命令
 asar pack source app.asar
 asar pack source app.asar
 调试启动
 调试启动
-electron app.asar
+electron app.asar
+

+ 29 - 8
source/lib/image.js

@@ -189,7 +189,7 @@ class executor extends EventEmitter {
         }
         }
     }
     }
 
 
-    async downloadSheet(dir, template, append, watermark, showMarker) {
+    async downloadSheet(dir, template, append, failover, watermark, showMarker) {
         let bucket = env.server.bucketPrefix + '-sheet'
         let bucket = env.server.bucketPrefix + '-sheet'
         let client = upyun(bucket, config.upyun.operator, config.upyun.password)
         let client = upyun(bucket, config.upyun.operator, config.upyun.password)
         if (env.server.upyunDomain && env.server.upyunDomain != '') {
         if (env.server.upyunDomain && env.server.upyunDomain != '') {
@@ -218,11 +218,21 @@ class executor extends EventEmitter {
                     for (let i = 1; i <= student.sheetCount; i++) {
                     for (let i = 1; i <= student.sheetCount; i++) {
                         promises.push(this.downloadFile(append, config.imageUrl.sheet, template, student, dir, client, bucket, i, watermark, showMarker))
                         promises.push(this.downloadFile(append, config.imageUrl.sheet, template, student, dir, client, bucket, i, watermark, showMarker))
                     }
                     }
-                    //等待所有图片下载完毕
-                    await Promise.all(promises)
-
-                    count++
-                    this.emit('count', count)
+                    try {
+                        //等待所有图片下载完毕
+                        await Promise.all(promises)
+                        count++
+                        this.emit('count', count)
+                    } catch (err) {
+                        //判断是否异常终止
+                        if (failover) {
+                            throw err
+                        } else {
+                            logger.error('download sheet error:' + err)
+                            logger.error(err)
+                            continue
+                        }
+                    }
                 }
                 }
             }
             }
             this.emit('finish')
             this.emit('finish')
@@ -233,7 +243,7 @@ class executor extends EventEmitter {
         }
         }
     }
     }
 
 
-    async downloadPackage(dir, template, append) {
+    async downloadPackage(dir, template, append, failover) {
         let bucket = env.server.bucketPrefix + '-package'
         let bucket = env.server.bucketPrefix + '-package'
         let client = upyun(bucket, config.upyun.operator, config.upyun.password)
         let client = upyun(bucket, config.upyun.operator, config.upyun.password)
         if (env.server.upyunDomain && env.server.upyunDomain != '') {
         if (env.server.upyunDomain && env.server.upyunDomain != '') {
@@ -249,7 +259,18 @@ class executor extends EventEmitter {
                 let p = array[i]
                 let p = array[i]
                 p.examId = env.examId
                 p.examId = env.examId
                 for (let i = 1; i <= p.picCount; i++) {
                 for (let i = 1; i <= p.picCount; i++) {
-                    await this.downloadFile(append, config.imageUrl.package, template, p, dir, client, bucket, i)
+                    try {
+                        await this.downloadFile(append, config.imageUrl.package, template, p, dir, client, bucket, i)
+                    } catch (err) {
+                        //判断是否异常终止
+                        if (failover) {
+                            throw err
+                        } else {
+                            logger.error('download package error: ' + err)
+                            logger.error(err)
+                            continue
+                        }
+                    }
                 }
                 }
                 count++
                 count++
                 this.emit('count', count)
                 this.emit('count', count)

+ 2 - 2
source/view/image-download.html

@@ -96,9 +96,9 @@
                 $('#popup').show()
                 $('#popup').show()
             })
             })
             if (config.type == '1') {
             if (config.type == '1') {
-                imageUtil.downloadSheet(config.dir, config.template, config.append, config.watermark, config.showMarker)
+                imageUtil.downloadSheet(config.dir, config.template, config.append, config.failover, config.watermark, config.showMarker)
             } else {
             } else {
-                imageUtil.downloadPackage(config.dir, config.template, config.append)
+                imageUtil.downloadPackage(config.dir, config.template, config.append, config.failover)
             }
             }
         })
         })
     </script>
     </script>

+ 15 - 0
source/view/image.html

@@ -55,6 +55,15 @@
                             </div>
                             </div>
                         </td>
                         </td>
                     </tr>
                     </tr>
+                    <tr id="exception-select">
+                        <th>异常处理:</th>
+                        <td>
+                            <div class="input-radio">
+                                <label><input type="radio" name="exception" value="1"><span></span><em>终止</em></label>
+                                <label><input type="radio" name="exception" value="2"><span></span><em>跳过</em></label>
+                            </div>
+                        </td>
+                    </tr>
                     <tr id="watermark-select" style="display: none">
                     <tr id="watermark-select" style="display: none">
                         <th>添加分数水印:</th>
                         <th>添加分数水印:</th>
                         <td>
                         <td>
@@ -138,6 +147,7 @@
             $('#run-button').click(() => {
             $('#run-button').click(() => {
                 let type = $('input:radio[name="type"]:checked').val()
                 let type = $('input:radio[name="type"]:checked').val()
                 let append = $('input:radio[name="append"]:checked').val()
                 let append = $('input:radio[name="append"]:checked').val()
+                let exceptionHandle = $('input:radio[name="exception"]:checked').val()
                 let watermark = $('input:radio[name="watermark"]:checked').val()
                 let watermark = $('input:radio[name="watermark"]:checked').val()
                 let showMarker = $('input:radio[name="showMarker"]:checked').val()
                 let showMarker = $('input:radio[name="showMarker"]:checked').val()
                 let template = $('#template-input').val()
                 let template = $('#template-input').val()
@@ -158,6 +168,10 @@
                     alert('请选择是否续传')
                     alert('请选择是否续传')
                     return false
                     return false
                 }
                 }
+                if (exceptionHandle == undefined || exceptionHandle == '') {
+                    alert('请选择异常处理方法')
+                    return false
+                }
                 if (type == '1' && (watermark == undefined || watermark == '')) {
                 if (type == '1' && (watermark == undefined || watermark == '')) {
                     alert('请选择是否添加分数水印')
                     alert('请选择是否添加分数水印')
                     return false
                     return false
@@ -171,6 +185,7 @@
                     template: template.trim(),
                     template: template.trim(),
                     dir: dir.trim(),
                     dir: dir.trim(),
                     append: append == '1',
                     append: append == '1',
+                    failover: exceptionHandle == '1',
                     watermark: watermark == '1',
                     watermark: watermark == '1',
                     showMarker: showMarker == '1'
                     showMarker: showMarker == '1'
                 }))
                 }))