فهرست منبع

统一文件上传数据响应格式,并支持uploading上传事件拦截以及显示错误信息

jqh 4 سال پیش
والد
کامیت
d9b00626d4

+ 20 - 20
resources/assets/dcat/extra/upload.js

@@ -374,7 +374,7 @@
                                         return;
                                     }
 
-                                    Dcat.error(result.message || 'Remove file failed.');
+                                    showErrorResponse(result)
                                 }
                             });
 
@@ -664,6 +664,16 @@
             updateStatusText();
         }
 
+        // 显示api响应的错误信息
+        function showErrorResponse(response) {
+            var message = 'Unknown error!';
+            if (response && response.data) {
+                message = response.data.message || message;
+            }
+
+            Dcat.error(message)
+        }
+
         // 移除form表单的文件
         function removeFormFile(fileId) {
             if (!fileId) return;
@@ -915,7 +925,7 @@
                                 return;
                             }
 
-                            Dcat.error(result.message || 'Remove file failed.')
+                            showErrorResponse(result)
                         }
                     });
                 });
@@ -1063,38 +1073,28 @@
                         break;
                     case  'uploadAccept':
                         // 上传失败,返回false
-                        //正常来说上传返回必须是个json 必须包含 reason.id  否则肯定出错了
-                        if (!reason || !reason.id) {
-                            var errorMessage;
-                            if (reason && reason.data && reason.data.message) {
-                                errorMessage = reason.data.message
-                            } else if(reason && reason.error) {
-                                errorMessage = reason.error.message //DCAT 原有的逻辑
-                            } else {
-                                errorMessage = "Unknown error!"
-                            }
-
-                            Dcat.error(errorMessage);
+                        if (! reason || ! reason.status) {
+                            showErrorResponse(reason);
 
                             faildFiles[obj.file.id] = obj.file;
 
                             return false;
                         }
 
-                        if (reason.merge) {
+                        if (reason.data && reason.data.merge) {
                             // 分片上传
                             return;
                         }
 
                         // 上传成功,保存新文件名和路径到file对象
-                        obj.file.serverId = reason.id;
-                        obj.file.serverName = reason.name;
-                        obj.file.serverPath = reason.path;
-                        obj.file.serverUrl = reason.url || null;
+                        obj.file.serverId = reason.data.id;
+                        obj.file.serverName = reason.data.name;
+                        obj.file.serverPath = reason.data.path;
+                        obj.file.serverUrl = reason.data.url || null;
 
                         appendUploadedFile(obj.file);
 
-                        addInput(reason.id);
+                        addInput(reason.data.id);
 
                         var $li = getFileView(obj.file.id);
 

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
resources/dist/dcat/extra/upload.js


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
resources/dist/dcat/extra/upload.js.map


+ 13 - 0
src/Admin.php

@@ -7,6 +7,7 @@ use Dcat\Admin\Contracts\ExceptionHandler;
 use Dcat\Admin\Contracts\Repository;
 use Dcat\Admin\Exception\InvalidArgumentException;
 use Dcat\Admin\Http\Controllers\AuthController;
+use Dcat\Admin\Http\JsonResponse;
 use Dcat\Admin\Layout\Menu;
 use Dcat\Admin\Layout\Navbar;
 use Dcat\Admin\Layout\SectionManager;
@@ -335,6 +336,18 @@ class Admin
         return static::context()->ignoreQueries ?? [];
     }
 
+    /**
+     * 响应json数据.
+     *
+     * @param array $data
+     *
+     * @return JsonResponse
+     */
+    public static function json(array $data = [])
+    {
+        return JsonResponse::make($data);
+    }
+
     /**
      * 插件管理.
      *

+ 4 - 4
src/Form/Field/UploadField.php

@@ -188,10 +188,10 @@ trait UploadField
         $id = $request->get('_id');
 
         if (! $id) {
-            return $this->responseErrorMessage(403, 'Missing id');
+            return $this->responseErrorMessage('Missing id');
         }
 
-        if ($errors = $this->getErrorMessages($file)) {
+        if ($errors = $this->getValidationErrors($file)) {
             return $this->responseValidationMessage($errors);
         }
 
@@ -338,7 +338,7 @@ trait UploadField
      *
      * @return bool|\Illuminate\Support\MessageBag
      */
-    protected function getErrorMessages(UploadedFile $file)
+    protected function getValidationErrors(UploadedFile $file)
     {
         $rules = $attributes = [];
 
@@ -355,7 +355,7 @@ trait UploadField
         if (! $validator->passes()) {
             $errors = $validator->errors()->getMessages()[$this->column];
 
-            return implode('; ', $errors);
+            return implode('<br> ', $errors);
         }
     }
 

+ 21 - 8
src/Http/JsonResponse.php

@@ -4,6 +4,7 @@ namespace Dcat\Admin\Http;
 
 use Dcat\Admin\Exception\AdminException;
 use Dcat\Admin\Support\Helper;
+use Illuminate\Contracts\Support\Arrayable;
 use Illuminate\Contracts\Validation\Validator;
 use Illuminate\Support\MessageBag;
 use Illuminate\Support\Str;
@@ -30,7 +31,7 @@ use Illuminate\Validation\ValidationException;
  * @method $this withValidationIf($condition, $errors)
  * @method $this withExceptionIf($condition, \Throwable $e)
  */
-class JsonResponse
+class JsonResponse implements Arrayable
 {
     protected $status = true;
     protected $statusCode = 200;
@@ -39,6 +40,11 @@ class JsonResponse
     protected $html;
     protected $options = [];
 
+    public function __construct(array $data = [])
+    {
+        $this->data($data);
+    }
+
     /**
      * 设置请求结果是否成功.
      *
@@ -90,6 +96,8 @@ class JsonResponse
      */
     public function success(?string $message)
     {
+        $this->status(true);
+
         return $this->show('success', $message);
     }
 
@@ -359,8 +367,7 @@ class JsonResponse
                 sprintf('[%s] %s', get_class($exception), $exception->getMessage())
             );
     }
-    
-    
+
     /**
      * Flash a piece of data to the session.
      *
@@ -378,13 +385,11 @@ class JsonResponse
 
         return $this;
     }
-        
-    
 
     /**
-     * @return \Illuminate\Http\JsonResponse
+     * @return array
      */
-    public function send()
+    public function toArray()
     {
         $data = ['status' => $this->status, 'data' => $this->data];
 
@@ -392,7 +397,15 @@ class JsonResponse
             $data['html'] = Helper::render($this->html);
         }
 
-        return response()->json($this->options + $data, $this->statusCode);
+        return $data + $this->options;
+    }
+
+    /**
+     * @return \Illuminate\Http\JsonResponse
+     */
+    public function send()
+    {
+        return response()->json($this->toArray(), $this->statusCode);
     }
 
     public function __call($method, $arguments)

+ 2 - 1
src/Http/Middleware/WebUploader.php

@@ -2,6 +2,7 @@
 
 namespace Dcat\Admin\Http\Middleware;
 
+use Dcat\Admin\Admin;
 use Dcat\Admin\Support\WebUploader as Uploader;
 use Illuminate\Http\Request;
 
@@ -24,7 +25,7 @@ class WebUploader
         try {
             if (! $file = $webUploader->getUploadedFile()) {
                 // 分块未上传完毕,返回已合并成功信息
-                return response()->json(['merge' => 1]);
+                return Admin::json(['merge' => 1])->send();
             }
 
             $response = $next($request);

+ 2 - 1
src/Traits/HasFormResponse.php

@@ -2,6 +2,7 @@
 
 namespace Dcat\Admin\Traits;
 
+use Dcat\Admin\Admin;
 use Dcat\Admin\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Illuminate\Support\MessageBag;
@@ -15,7 +16,7 @@ trait HasFormResponse
      */
     public function response()
     {
-        return new JsonResponse();
+        return Admin::json();
     }
 
     /**

+ 16 - 17
src/Traits/HasUploadedFile.php

@@ -2,6 +2,7 @@
 
 namespace Dcat\Admin\Traits;
 
+use Dcat\Admin\Admin;
 use Dcat\Admin\Form\Field\File;
 use Dcat\Admin\Support\WebUploader;
 use Illuminate\Filesystem\FilesystemAdapter;
@@ -86,16 +87,16 @@ trait HasUploadedFile
      *
      * @param string $path 文件完整路径
      * @param string $url
-     * @return \Illuminate\Http\JsonResponse
+     *
+     * @return mixed
      */
     public function responseUploaded(string $path, string $url)
     {
-        return response()->json([
-            'status' => true,
-            'id'     => $path,
-            'name'   => basename($path),
-            'path'   => basename($path),
-            'url'    => $url,
+        return Admin::json([
+            'id'   => $path,
+            'name' => basename($path),
+            'path' => basename($path),
+            'url'  => $url,
         ]);
     }
 
@@ -104,11 +105,11 @@ trait HasUploadedFile
      *
      * @param mixed $message
      *
-     * @return \Illuminate\Http\JsonResponse
+     * @return mixed
      */
     public function responseValidationMessage($message)
     {
-        return $this->responseErrorMessage($message, 103);
+        return $this->responseErrorMessage($message);
     }
 
     /**
@@ -117,23 +118,21 @@ trait HasUploadedFile
      * @param $error
      * @param $code
      *
-     * @return \Illuminate\Http\JsonResponse
+     * @return mixed
      */
-    public function responseErrorMessage($error, $code = 107)
+    public function responseErrorMessage($error)
     {
-        return response()->json([
-            'error' => ['code' => $code, 'message' => $error], 'status' => false,
-        ]);
+        return Admin::json()->error($error);
     }
 
     /**
      * 文件删除成功.
      *
-     * @return \Illuminate\Http\JsonResponse
+     * @return mixed
      */
     public function responseDeleted()
     {
-        return response()->json(['status' => true]);
+        return Admin::json();
     }
 
     /**
@@ -145,6 +144,6 @@ trait HasUploadedFile
      */
     public function responseDeleteFailed($message = '')
     {
-        return response()->json(['status' => false, 'message' => $message]);
+        return $this->responseErrorMessage($message);
     }
 }

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است