# UploadUtil 文件上传工具

## 导入使用
```code[javascript]
import UploadUtil from "ss-universal-client-web/comp/service/uploader";
```
> 依赖全局配置
## 全局上传配置 上传文件处理器

## 获取一个新的上传实例
```code[javascript]
    let fileUploadHandler = function(ops){...};//自定义上传配置
    let uploader = UploadUtil.getUploader(fileUploadHandler);
    uploader方法参考UploadUtil

```

## 上传一个文件对象
```code[javascript]
    /**
     * 上传一个文件对象
     * @param file
     * @returns {Promise<unknown>}{
                size: (number) 文件大小,
                name: (string) 文件名称,
                raw:File
                serverUrl: (string) 服务器地址 接口使用地址,
                url: (string) 图片地址 前端使用地址
     * }
     */
    let data = await UploadUtil.uploadFile(file);
```

## 打开上传交互窗口
```code[javascript]
    /**
     * 上传文件
     * @param ops
     * @param ops.fileUploadHandler 上传文件处理器 非必传
     * @param 其他参数参考 form/su-upload#options 
              packages/form/su-upload/types/mixin setOptions参数
     * @returns {Promise<*>}
     */
    let data = await UploadUtil.toUploadFile(ops);
```


```code[html]
<link rel="stylesheet" href="https://www.niceloo.com/zt4ird/@qdyfb/common/js-plugin/element-ui/2.12.0/lib/theme-chalk/index.css">
<script type="text/javascript" src="http://ures.niceloo.com/element-ui/index.js"></script>
```

```code[javascript]
   import config from "niceloo-vue2element-ui/config/index";
   
   config.load({
       /**
        * 默认上传文件处理器
        * @param file
        * @param onSuccess
        * @param onError
        * @param onProgress
        */
       defaultFileUploadHandler({
                                    file,
                                    onSuccess,
                                    onError,
                                    onProgress
                                }) {
   
           //1、获取上传令牌
           nlapp.AsyncRequest.callService({
               url: "fs/file/upload/token",
               data: {
                   s: Math.random()
               }
           }).success(function (data) {
               let actionUrl =
                   nlapp.Config.fileServerUrl +
                   "/file/upload?params=" +
                   encodeURI(
                       JSON.stringify(Object.assign({
                           fileStatus: "T",
                           fileStoretype: "L",
                           fileType: "O",
                           targetType: "image"
                       }, {
                           uploadToken: data.uploadToken
                       }))
                   );
               let formData = new FormData();
               formData.append('file', file);
               window.axios.post(actionUrl, formData, {
                   headers: {
                       'Content-Type': 'multipart/form-data'
                   }, onUploadProgress: progressEvent => {
                       let percent = (progressEvent.loaded / progressEvent.total * 100) | 0;
                       onProgress({percent});//调用onProgress方法来显示进度条，需要传递个对象 percent为进度值
                   }
               }).then(res => {
                   let response = res.data;
                   switch (response.code) {
                       case "0000":
                           let data = response.data;
                           let serverUrl = nlapp.Config.fileServerUrl +
                               "/file/download?action=view&path=" + data.filePath;
                           onSuccess({
                                 serverUrl
                           });
                           break;
                       default:
                           console.error(response.msg);
                           onError(response.msg);
                           break;
                   }
               }).catch((e) => {
                   console.error('服务器连接失败！', e);
                   onError('服务器连接失败！');
               });
           }).tokenError(function () {
               onError('未登录，禁止上传！');
               nlulib.User.toLogin();
           })
       }
   })


```
