zoukankan      html  css  js  c++  java
  • 二,文件上传控件el-upload

    需求: 上传文件,保存到服务器,并保存历史记录

    上效果图

     

     

          <el-form-item label="文件">
            <el-upload
              ref="uploadHarnessDrawing"
              v-loading="loadingFile"
              action=""
              :limit="10"
              :on-preview="handlePreview"
              :on-change="onHarnessDrawingFileChange"
              :on-remove="onHarnessDrawingFileRemove"
              :file-list="harnessDrawingFileList"
              :auto-upload="false"
            >
              <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
            </el-upload>
          </el-form-item>
    View Code

    el-upload 为Element上传控件,需要注意的以下三个事件,分别为预览,Change以及删除,change和remove直接修改file-list属性

    :on-preview="handlePreview"
    :on-change="onHarnessDrawingFileChange"
    :on-remove="onHarnessDrawingFileRemove"
    :file-list="harnessDrawingFileList"
    onHarnessDrawingFileChange(file, fileList) {
          this.harnessDrawingFileList = fileList
        },
        onHarnessDrawingFileRemove(file, fileList) {
          this.harnessDrawingFileList = fileList
        },
        handlePreview(file) {
          var url = file.url
          if (url === undefined) {
            return
          }
          this.viewFile(url)
        },
        viewFile(url) {
          var param = {
            token: getToken(),
            url: url
          }
          this.loadingFile = true
          fileDownload(param).then(res => {
            if (res.code === 20000) {
              downloadFile(res.data.name, res.data.dataStr)
              this.loadingFile = false
            }
          })
        }
    View Code

    这么做的原因是功能不使用自带的提交功能,而是使用按钮统一提交,并且在后台判断文件修改

    提交事件

    submitUpload() {
          this.loading = true
          this.uploadForm = new FormData()
          this.uploadForm.append('id', this.id)
          this.uploadForm.append('token', this.token)
          this.uploadForm.append('comment', this.temp.Comment === undefined ? '' : this.temp.Comment)
          var config = {
            // 这里是重点,需要和后台沟通好请求头,Content-Type不一定是这个值
            headers: { 'Content-Type': 'multipart/form-data' }
          }
          for (var i = 0; i < this.harnessDrawingFileList.length; i++) {
            this.uploadForm.append('harnessDrawingFileList', this.harnessDrawingFileList[i].raw)
            if (this.harnessDrawingFileList[i].raw === undefined) {
              // 初始文件
              this.uploadForm.append('initialHarnessDrawingFileList', this.harnessDrawingFileList[i].url)
            }
          }
          // 添加请求头
          axios.post(this.baseURL + '/ProjectManager/uploadFile', this.uploadForm, config).then(response => {
            this.loading = false
            if (response.data.code !== 20000) {
              MessageBox.alert(response.data.msg)
              return
            }
            this.innerVisible = false
            this.$notify({
              title: '成功',
              message: response.data.msg,
              type: 'success',
              duration: 2000
            })
            this.$emit('refreshTable')
          })
        }
    View Code

    后台代码:

    /// <summary>
            /// 上传文件
            /// </summary>
            /// <param name="id">Id</param>
            /// <param name="token">登录Token</param>
            /// <returns></returns>
            [HttpPost]
            public HttpResponseMessage uploadElectricalEngineerFile()
            {
                // 返回数据
                String result = String.Empty;
                String tempUploadPath = String.Empty;
                String tempUploadDatePath = String.Empty;
                try
                {
                    String msg = String.Empty;
                    String token = HttpContext.Current.Request.Form["token"];
                    LoginUser loginUser = GetCurrentLoginUser(token);
                    tempUploadPath = HttpContext.Current.Request.MapPath(String.Format("/upload/Temp/{0}/", loginUser.Uid));
                    tempUploadDatePath = tempUploadPath + DateTime.Now.ToString("yyyyMMddHHmmss") + "/";
                    String taskId = HttpContext.Current.Request.Form["id"];
                    String comment = HttpContext.Current.Request.Form["comment"] == null ? "" : HttpContext.Current.Request.Form["comment"];
                    HttpFileCollection files = HttpContext.Current.Request.Files;
                    // 文件夹信息获取,根据项目名 命名
                    String path = HttpContext.Current.Request.MapPath("/upload/");
                    TaskDomain task = TaskBiz.GetById(taskId);
                    TechnicalSupportDomain techDomain = null;
                    if (task == null)
                    {
                        AppLog.Error(Constant.MSG_NO_TASK_DATA);
                        return JsonResultModel(Result_Success_Error, Constant.MSG_NO_TASK_DATA, result);
                    }
                    techDomain = TechnicalSupportBiz.GetById(task.MasterId);
                    if (techDomain == null)
                    {
                        AppLog.Error(Constant.MSG_NO_SOURCE_DATA);
                        return JsonResultModel(Result_Success_Error, Constant.MSG_NO_SOURCE_DATA, result);
                    }
                    ContractDomain contract = pjService.GetContractById(techDomain.ContractId); //ContractBiz.GetById(techDomain.ContractId);
                    path = String.Format("/upload/{0}/{1}/{2}", contract.CustomerName, contract.ProjectName, Constant.FILE_PATH_TECHNICAL_SUPPORT);
                    msg = String.Format("用户【{0}】为项目【{1}】", loginUser.User.FullName, contract.ProjectName);
                    // 把所有的文件保存到临时文件夹中,在临时文件夹操作
                    String initialHarnessDrawingFileFileList = HttpContext.Current.Request.Form["initialHarnessDrawingFileList"] == null ? "" : HttpContext.Current.Request.Form["initialHarnessDrawingFileList"];
                    List<String> lsInitialHarnessDrawingFileFile = new List<String>(initialHarnessDrawingFileFileList.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries));
                    // 判断文件是否变更
                    GetElectricalEngineerFileInfo(techDomain);
                    List<String> harnessDrawingFiles = techDomain.HarnessDrawingFiles.Select(p => p.url).ToList();
                    // 文件是否变更
                    techDomain.HarnessDrawingFileChange = lsInitialHarnessDrawingFileFile.All(harnessDrawingFiles.Contains) && harnessDrawingFiles.All(lsInitialHarnessDrawingFileFile.Contains) && lsInitialHarnessDrawingFileFile.Count == harnessDrawingFiles.Count;
                    // 没有改变
                    if (techDomain.HarnessDrawingFileChange && files.AllKeys.Length == 0)
                    {
                        return JsonResultModel(Result_Success_Code, Result_Success_MSG, result);
                    }
                    List<String> deleteFileInfo = new List<String>();
                    // 找出删除的文件
                    List<String> list = harnessDrawingFiles.Except(lsInitialHarnessDrawingFileFile).ToList();
                    if (list != null && list.Count > 0)
                    {
                        list.ForEach(item =>
                        {
                            deleteFileInfo.Add(String.Format("文件{0}", Path.GetFileName(item)));
                        });
                    }
                    // 把现有的文件保存到临时文件夹中
                    if (!Directory.Exists(tempUploadDatePath + "HarnessDrawing/"))
                    {
                        Directory.CreateDirectory(tempUploadDatePath + "HarnessDrawing/");
                    }
                    for (int iIndex = 0; iIndex < lsInitialHarnessDrawingFileFile.Count; iIndex++)
                    {
                        FileInfo file = new FileInfo(HttpContext.Current.Request.MapPath(lsInitialHarnessDrawingFileFile[iIndex]));
                        file.CopyTo(tempUploadDatePath + "HarnessDrawing/" + file.Name);
                    }
                    String fileName = String.Empty;
                    for (int iIndex = 0; iIndex < files.AllKeys.Length; iIndex++)
                    {
                        HttpPostedFile postedFile = files[iIndex];
                        fileName = System.IO.Path.GetFileName(postedFile.FileName);
                        switch (files.AllKeys[iIndex])
                        {
                            case Constant.FILE_HARNESSDRAWING_LIST:
                                postedFile.SaveAs(tempUploadDatePath + "HarnessDrawing/" + fileName);
                                break;
                        }
                    }
                    // 获取最终的文件
                    DirectoryInfo dir = new DirectoryInfo(tempUploadDatePath + "HarnessDrawing/");
                    List<FileInfo> lastedHarnessDrawingFiles = dir.GetFiles().ToList();
    
                    // 上传文件
                    String filePath = String.Empty;
                    String bakDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                    String versionName = DateTime.Now.ToFileTimeUtc().ToString();
                    String versionPath = String.Empty;
                    List<String> fileInfoList = new List<String>();
                    // 文件
                    techDomain.HarnessDrawing = String.Empty;
                    filePath = path + String.Format("/{0}/", Constant.FILE_PATH_HARNESSDRAWING);
                    foreach (FileInfo file in lastedHarnessDrawingFiles)
                    {
                        fileName = file.Name;
                        if (!Directory.Exists(filePath))
                        {
                            Directory.CreateDirectory(filePath);
                        }
                        versionPath = filePath + versionName + "/";
                        techDomain.HarnessDrawing = versionPath;
                        fileInfoList.Add(String.Format(" 文件:{0}", fileName));
                        // 备份文件
                        versionPath = HttpContext.Current.Request.MapPath(versionPath);
                        if (!Directory.Exists(versionPath))
                        {
                            Directory.CreateDirectory(versionPath);
                        }
                        file.CopyTo(versionPath + fileName);
                    }
                    // 写入Log
                    if (lastedHarnessDrawingFiles.Count > 0)
                    {
                        CommonMethod.WriteVersionLog(HttpContext.Current.Request.MapPath(filePath) + Constant.VERSION_LOG_NAME, String.Format("{0}|{1}|{2}", bakDate, versionName, comment));
                    }
                    techDomain.TaskId = taskId;
                    result = pjService.SaveElectricalEngineerTaskInfo(techDomain, loginUser);
                    if (!String.IsNullOrEmpty(result))
                    {
                        AppLog.Error(result);
                        return JsonResultModel(Result_Success_Error, result, null);
                    }
                    if (deleteFileInfo.Count > 0)
                    {
                        msg += String.Format("删除了{0}", String.Join(",", deleteFileInfo));
                    }
                    if (fileInfoList.Count > 0)
                    {
                        msg += String.Format("上传了{0}", String.Join(",", fileInfoList));
                    }
                    LogHelper.LogOperate(msg, Constant.OPEARTE_LOG_INFO, loginUser);
                }
                catch (Exception ex)
                {
                    AppLog.Error(ex);
                    return JsonResultModel(Result_Success_Error, ex.Message, result);
                }
                finally
                {
                    if (!String.IsNullOrEmpty(tempUploadPath))
                    {
                        // 删除临时文件夹
                        CommonMethod.DeleteDirectory(tempUploadPath, tempUploadDatePath.TrimEnd('/'));
                    }
                }
    
                return JsonResultModel(Result_Success_Code, Result_Success_MSG, result);
            }
    View Code

    自此,文件上传功能完成

  • 相关阅读:
    Xml---->JAXP DOM解析
    java(web)相对路径,绝对路径
    重定向与转发
    struts2之限制文件上传类型
    Struts2之文件上传上限
    Struts2之result中标准结果代码
    struts2之指定处理的请求后缀
    File.rename操作后,获取文件的名称,输出的名称仍为之前的名称
    硬盤掛載
    Java应用打包后运行需要注意编码问题 .
  • 原文地址:https://www.cnblogs.com/byron-123/p/12610836.html
Copyright © 2011-2022 走看看