• vue2+element-ui批量导入方法并判断上传的文件是否为xls或xlsx


    业务需求:

    代码结构:

    1. title="批量导入"
    2. :close-on-click-modal="true"
    3. @close="close()"
    4. :visible="true"
    5. width="35%"
    6. :center="true"
    7. >
    8. <div class="el-dialog-div">
    9. <div class="header_area">
    10. <div class="header_word">
    11. <p>专家导入p>
    12. div>
    13. <div class="header_list">
    14. <el-button
    15. type="primary"
    16. size="small"
    17. icon="el-icon-download"
    18. plain
    19. @click="downloadTemplate"
    20. >下载模板
    21. >
    22. div>
    23. div>
    24. <el-upload
    25. class="upload-demo"
    26. ref="upload"
    27. :action="uploadUrl"
    28. :file-list="fileList"
    29. :auto-upload="false"
    30. :headers="{ token: $cookie.get('token') }"
    31. :multiple="false"
    32. :show-file-list="true"
    33. :on-change="handleChange"
    34. :on-remove="handleRemove"
    35. :limit="1"
    36. >
    37. <el-button
    38. slot="trigger"
    39. size="small"
    40. type="primary"
    41. icon="el-icon-plus"
    42. plain
    43. :disabled="fileList.length>0"
    44. >专家文件选择
    45. el-button>
    46. el-upload>
    47. div>
    48. <span slot="footer" class="dialog-footer">
    49. <el-button @click="close()">取消el-button>
    50. <el-button type="primary" @click="dataFormSubmit()" :uploading="uploading"
    51. >确定
    52. >
    53. span>
    54. el-dialog>

    下载模板方法:

    1. // 下载模板
    2. downloadTemplate() {
    3. // 模板文件的下载链接
    4. const templateFileUrl = "/uploads/template.xlsx"; //后端给一个服务器模板链接
    5. // 创建一个链接元素
    6. const link = document.createElement("a");
    7. link.href = templateFileUrl;
    8. link.target = "_blank";
    9. link.download = "模板.xlsx"; // 下载的文件名
    10. link.style.display = "none";
    11. // 将链接元素添加到 DOM 中
    12. document.body.appendChild(link);
    13. // 模拟点击下载链接
    14. link.click();
    15. // 移除链接元素
    16. document.body.removeChild(link);
    17. },

    提交上传方法:

    1.先做类型判断 大小判断 是否上传

    1. // 检查是否选择了文件
    2. if (this.fileList.length <= 0) {
    3. this.$message.error("请先选择要导入的文件");
    4. return;
    5. }
    6. // 检查文件类型是否是 xlsx 或 xls
    7. const isExcel =
    8. this.fileList[0].name.endsWith(".xlsx") ||
    9. this.fileList[0].name.endsWith(".xls");
    10. if (!isExcel) {
    11. this.$message.error("仅支持上传 .xlsx 或 .xls 格式的文件!");
    12. return;
    13. }
    14. // 检查文件大小是否符合限制
    15. const isSizeValid = this.fileList[0].size / 1024 / 1024 < 10;
    16. if (!isSizeValid) {
    17. this.$message.error("文件大小不能超过10MB");
    18. return;
    19. }

    2.提交后端方法

    1. this.uploading = true;
    2. // 创建 FormData 对象,用于将文件作为表单字段上传
    3. const formData = new FormData();
    4. formData.append("file", this.fileList[0].raw);
    5. // 发送文件上传请求
    6. this.$http({
    7. url: this.$http.adornUrl(
    8. "/professorInfo/importProfessorInfo",
    9. "member"
    10. ),
    11. method: "post",
    12. headers: { "Content-Type": "multipart/form-data" },
    13. data: formData,
    14. })
    15. .then(({ data }) => {
    16. console.log(data, "000000000");
    17. // 处理上传成功的逻辑
    18. if (data && data.code === "0") {
    19. // 上传成功的处理逻辑
    20. this.$message({
    21. message: `成功导入${data.data.successNum}条数据`,
    22. type: "success",
    23. duration: 2000,
    24. onClose: () => {
    25. this.$emit("refresh-data-list");
    26. this.close();
    27. },
    28. });
    29. } else {
    30. // 上传失败的处理逻辑
    31. this.$message.error(data.msg);
    32. // 其他逻辑处理...
    33. }
    34. this.uploading = false;
    35. this.$emit("refresh-data-list");
    36. this.close();
    37. })
    38. .catch((error) => {
    39. // 处理请求异常的逻辑
    40. this.$message.error(data.msg);
    41. console.error(error);
    42. // 其他逻辑处理...
    43. this.uploading = false;
    44. });

    3.完整代码

    1. dataFormSubmit() {
    2. // 检查是否选择了文件
    3. if (this.fileList.length <= 0) {
    4. this.$message.error("请先选择要导入的文件");
    5. return;
    6. }
    7. // 检查文件类型是否是 xlsx 或 xls
    8. const isExcel =
    9. this.fileList[0].name.endsWith(".xlsx") ||
    10. this.fileList[0].name.endsWith(".xls");
    11. if (!isExcel) {
    12. this.$message.error("仅支持上传 .xlsx 或 .xls 格式的文件!");
    13. return;
    14. }
    15. // 检查文件大小是否符合限制
    16. const isSizeValid = this.fileList[0].size / 1024 / 1024 < 10;
    17. if (!isSizeValid) {
    18. this.$message.error("文件大小不能超过10MB");
    19. return;
    20. }
    21. this.uploading = true;
    22. // 创建 FormData 对象,用于将文件作为表单字段上传
    23. const formData = new FormData();
    24. formData.append("file", this.fileList[0].raw);
    25. // 发送文件上传请求
    26. this.$http({
    27. url: this.$http.adornUrl(
    28. "/professorInfo/importProfessorInfo",
    29. "member"
    30. ),
    31. method: "post",
    32. headers: { "Content-Type": "multipart/form-data" },
    33. data: formData,
    34. })
    35. .then(({ data }) => {
    36. console.log(data, "000000000");
    37. // 处理上传成功的逻辑
    38. if (data && data.code === "0") {
    39. // 上传成功的处理逻辑
    40. this.$message({
    41. message: `成功导入${data.data.successNum}条数据`,
    42. type: "success",
    43. duration: 2000,
    44. onClose: () => {
    45. this.$emit("refresh-data-list");
    46. this.close();
    47. },
    48. });
    49. } else {
    50. // 上传失败的处理逻辑
    51. this.$message.error(data.msg);
    52. // 其他逻辑处理...
    53. }
    54. this.uploading = false;
    55. this.$emit("refresh-data-list");
    56. this.close();
    57. })
    58. .catch((error) => {
    59. // 处理请求异常的逻辑
    60. this.$message.error(data.msg);
    61. console.error(error);
    62. // 其他逻辑处理...
    63. this.uploading = false;
    64. });
    65. },
  • 相关阅读:
    室内温度控制仿真(Simulink+PLC)
    NR 物理层 Signal Power and Energy(db&dbm)
    二维码智慧门牌管理系统:革新小区安全管理的新力量
    IT学习笔记--Flink
    操作系统
    C语言:数据的存储
    安装mqtt服务器问题及处理办法
    C语言& | ^
    程序员的“剁手“清单:一生必遇的“必抓!”算法
    机器视觉软件破解的背后是道高一尺,魔高一丈
  • 原文地址:https://blog.csdn.net/shi15926lei/article/details/132718369