国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

element-ui文件上傳下載組件+后臺對應接口

這篇具有很好參考價值的文章主要介紹了element-ui文件上傳下載組件+后臺對應接口。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

element-ui文件上傳下載組件:
具備上傳、下載和刪除功能。
不自動上傳,附件選擇后只將文件加入待上傳列表,點擊確認上傳按鈕后上傳到后臺服務器,已上傳的文件通過表格的形式展示在上方表格中。
刪除和上傳權(quán)限可配置。
效果如下:
elementui下載文件,vue.js,elementui
elementui下載文件,vue.js,elementui
elementui下載文件,vue.js,elementui

代碼如下:

/*
 * @Description: element-ui文件上傳下載組件(不自動上傳)
 * @Author: yiwenli
 * @Date: 2023-03-30
 */
Vue.component('fileUpload', {
    name: 'fileUpload',
    template: /* html */ `<div>
        <div>已上傳文件列表</div>
        <el-table :data="uploadedFileList" :show-header="false">
                <el-table-column prop="fileName" width="300" align="center"></el-table-column>
                <el-table-column prop="operate" width="200" align="center">
                    <template slot-scope="scope">
                        <el-button class="el-icon-download" type="text" @click="fileDownload(scope.row)">下載</el-button>
                        <el-button class="el-icon-delete" type="text" @click="fileDeleteInServer(scope.row)" v-if="deleteAble">刪除</el-button>
                    </template>
                </el-table-column>
        </el-table>
		<el-form-item v-if="uploadAble">
			<el-upload
                action="#"
                :auto-upload="false"
				:multiple="true"
                :file-list="toUploadFileList"
                :on-change="fileChange"
                :on-remove="fileRemove"
                >
                    <el-button slot="trigger" size="small" type="primary">附件選擇</el-button>
                    <el-button size="small" plain @click="fileUpload">確認上傳</el-button>
			</el-upload>
		</el-form-item>
	</div>`,
    props: {
        // 原始文件數(shù)據(jù)
        fileList: {
            type: Array,
            required: true,
            default: () => [],
        },
        // 上傳功能是否可用
        uploadAble: {
            type: Boolean,
            required: false,
            default: true,
        },
        // 刪除功能是否可用
        deleteAble: {
            type: Boolean,
            required: false,
            default: true,
        },
    },
    data() {
        return {
            // 已上傳文件列表
            uploadedFileList: [],
            // 待上傳文件列表
            toUploadFileList: [],
        };
    },
    computed: {
        // 上傳路徑
        uploadUrl() {
            return requestUrlBase('/file/fileUpload');
        },
        // 刪除路徑
        deleteUrl() {
            return requestUrlBase('/file/deleteFile');
        },
        // 下載路徑
        downloadUrl() {
            return requestUrlBase('/file/downLoadFile');
        },
    },
    watch: {
        uploadedFileList() {
            this.$emit('update:fileList', this.uploadedFileList);
        },
        fileList() {
            this.uploadedFileList = this.fileList;
        },
    },
    created() {
        this.uploadedFileList = this.fileList;
    },
    methods: {
        /**
         * 文件上傳
         */
        fileUpload() {
            if (this.toUploadFileList.length === 0) {
                this.$message.error('請先選擇至少1個文件再上傳');
                return;
            }
            let formData = new FormData();
            this.toUploadFileList.forEach((item) => {
                formData.append('file', item.raw);
            });
            $http({
                url: this.uploadUrl,
                method: 'post',
                data: formData,
                headers: { 'Content-Type': 'multipart/form-data' },
            })
                .then(({ data }) => {
                    // 1、更新已上傳文件列表
                    this.uploadedFileList = this.uploadedFileList.concat(data);
                    // 2、更新待上傳文件列表
                    let returnFileMap = new Map(data.map((value) => [value.fileName, value.fileId]));
                    this.toUploadFileList = this.toUploadFileList
                        .filter((item) => !returnFileMap.has(item.name))
                        .map((item) => {
                            item.status = 'error';
                            return item;
                        });
                    this.$message.success('附件上傳完成');
                })
                .catch((e) => {
                    this.$message.error(e.message || '附件上傳失敗');
                });
        },
        /**
         * 文件修改
         * @param {*} file     當前操作文件對象
         * @param {*} fileList 文件列表
         */
        fileChange(file, fileList) {
            this.toUploadFileList = fileList;
        },
        /**
         * 文件刪除
         * @param {Object} file    當前操作文件對象
         * @param {Array} fileList 文件列表
         */
        fileRemove(file, fileList) {
            this.toUploadFileList = fileList;
        },
        /**
         * 文件從服務器端刪除
         * @param {Object} file 文件對象
         */
        fileDeleteInServer(file) {
            this.$confirm('確定刪除?', '提示', {
                confirmButtonText: '確定',
                cancelButtonText: '取消',
                type: 'warning',
            })
                .then(() => {
                    $http({
                        url: this.deleteUrl,
                        method: 'get',
                        params: requestParam(file, 'get'),
                        headers: {
                            'Content-Type': 'application/x-www-form-urlencoded',
                        },
                    })
                        .then(() => {
                            this.$message.success('文件刪除成功');
                            this.uploadedFileList.splice(
                                this.uploadedFileList.findIndex((item) => item.fileId === file.fileId),
                                1
                            );
                        })
                        .catch((e) => {
                            this.$message.error(e.message || '文件刪除失敗');
                        });
                })
                .catch(() => {
                    this.$message({
                        type: 'info',
                        message: '已取消刪除',
                    });
                });
        },
        /**
         * 文件下載
         * @param {Object} file 文件對象
         */
        fileDownload(file) {
            let params = {
                fileId: file.fileId,
                fileName: file.fileName,
                userOrgId: Session.get('userInfo').orgId,
            };
            this.postDownloadFile(params, this.downloadUrl);
        },
        /**
         * 以post方式傳參并下載文件
         * @param {Object} params 請求需要的參數(shù)
         * @param {String} url 請求url地址
         */
        postDownloadFile(params, url) {
            // params是post請求需要的參數(shù),url是請求url地址
            const form = document.createElement('form');
            form.style.display = 'none';
            form.action = url;
            form.method = 'post';
            document.body.appendChild(form);
            // 動態(tài)創(chuàng)建input并給value賦值
            for (const key in params) {
                const input = document.createElement('input');
                input.type = 'hidden';
                input.name = key;
                input.value = params[key];
                form.appendChild(input);
            }
            form.submit();
            form.remove();
        },
    },
});

<file-upload
     :file-list.sync="fileList"
     :upload-able="true"
     :delete-able="true"
></file-upload>

后端:文章來源地址http://www.zghlxwxcb.cn/news/detail-527313.html

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.io.file.FileNameUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.digest.DigestUtil;
import com.ieslab.model.Result;
import com.ieslab.pfjawebsvr.modules.file.domain.FileVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.Resource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.*;

/**
 * @author
 * @ClassName FileOpController
 * @Description 附件上傳下載
 * @date 2022年03月16日 14:20
 */
@Api(tags = "附件上傳下載")
@RestController
@RequestMapping("/file")
@Slf4j
public class FileController {

    @ApiOperation("附件上傳")
    @PostMapping("/fileUpload")
    public Result upLoadFile(@RequestHeader("userOrgId") String userOrgId, @RequestParam("file") MultipartFile[] files) {
        if (files.length == 0) {
            return Result.error("文件為空");
        }
        if (ObjectUtil.isNull(userOrgId)) {
            userOrgId = "null";
        }
        List<FileVO> fileVOList = new ArrayList<>();
        try {
            String basePath = System.getenv("PFJA_HOME") + "/file/" + userOrgId + "/";
            for (MultipartFile multipartFile : files) {
                String fileName = multipartFile.getOriginalFilename();
                //生成文件唯一has256值
                String hashValue = DigestUtil.sha256Hex(multipartFile.getBytes());
                String filePath = basePath + FileNameUtil.getPrefix(fileName) + "&" + hashValue + "." + FileNameUtil.getSuffix(fileName);
                File file = FileUtil.file(filePath);
                //實現(xiàn)文件存儲
                FileUtil.writeBytes(multipartFile.getBytes(), file);
                fileVOList.add(new FileVO(hashValue, fileName));
            }
            return Result.ok(fileVOList);
        } catch (Exception e) {
            return Result.error(e.getMessage());
        }
    }

    @ApiOperation("附件下載")
    @PostMapping(value = "/downLoadFile")
    public void downLoadFile(@RequestParam("userOrgId") String userOrgId, @RequestParam("fileId") String fileId, @RequestParam("fileName") String fileName, HttpServletResponse response) {
        if (ObjectUtil.isNull(userOrgId)) {
            userOrgId = "null";
        }
        String basePath = System.getenv("PFJA_HOME") + "/file/" + userOrgId + "/";
        try {
            // 創(chuàng)建輸出流對象
            ServletOutputStream outputStream = response.getOutputStream();
            //以字節(jié)數(shù)組的形式讀取文件
            String filePath = basePath + FileNameUtil.getPrefix(fileName) + "&" + fileId + "." + FileNameUtil.getSuffix(fileName);
            byte[] bytes = FileUtil.readBytes(filePath);
            // 設置返回內(nèi)容格式
            response.setContentType("application/octet-stream");
            // 把文件名按UTF-8取出并按ISO8859-1編碼,保證彈出窗口中的文件名中文不亂碼
            // 中文不要太多,最多支持17個中文,因為header有150個字節(jié)限制。
            // 這一步一定要在讀取文件之后進行,否則文件名會亂碼,找不到文件
            fileName = new String(fileName.getBytes("UTF-8"), "UTF-8");
            // 設置下載彈窗的文件名和格式(文件名要包括名字和文件格式)
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            // 返回數(shù)據(jù)到輸出流對象中
            outputStream.write(bytes);
            // 關(guān)閉流對象
            IoUtil.close(outputStream);
        } catch (Exception e) {
            Result.error(e.getMessage());
        }
    }

    @ApiOperation("附件刪除")
    @GetMapping("/deleteFile")
    public Result deleteFile(@RequestHeader("userOrgId") String userOrgId, @RequestParam("fileId") String fileId, @RequestParam("fileName") String fileName) {
        String basePath = System.getenv("PFJA_HOME") + "/file/" + userOrgId + "/";
        String filePath = basePath + FileNameUtil.getPrefix(fileName) + "&" + fileId + "." + FileNameUtil.getSuffix(fileName);
        File file = FileUtil.file(filePath);
        if (file.exists()) {
            boolean delete = file.delete();
            return Result.ok(delete);
        } else {
            return Result.ok(true);
        }
    }
}

到了這里,關(guān)于element-ui文件上傳下載組件+后臺對應接口的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • vue element el-upload附件上傳、在線預覽、下載當前預覽文件

    vue element el-upload附件上傳、在線預覽、下載當前預覽文件

    上傳 在線預覽(iframe): payload: response: 全部代碼: 初版–01

    2024年02月14日
    瀏覽(37)
  • element-ui圖像組件、上傳組件、分頁組件

    el-image:保留了原生的img的屬性 1、導航方向:通過mode屬性設置 2、菜單項 示例: (1)使用elementUI的上傳組件將圖片上傳到服務器并保存到數(shù)據(jù)庫中 (2)在el-table控件中將上傳的圖片顯示出來 實現(xiàn)過程: (1)給數(shù)據(jù)庫中的數(shù)據(jù)表增加一列(image_url):保存圖片在服務器中

    2024年02月07日
    瀏覽(22)
  • element-ui upload圖片上傳組件使用

    element-ui upload圖片上傳組件使用

    圖片上傳前端收集 數(shù)據(jù) 再調(diào)用接口發(fā)送到后端 組件標簽內(nèi)的參數(shù): 參數(shù) 說明 類型 可選值 默認值 action 必選參數(shù),上傳的地址 string — — headers 設置上傳的請求頭部 object — — multiple 是否支持多選文件 boolean — — data 上傳時附帶的額外參數(shù) object — — name 上傳的文件字段

    2023年04月19日
    瀏覽(26)
  • 基于element-ui封裝上傳圖片到騰訊云Cos組件

    基于element-ui封裝上傳圖片到騰訊云Cos組件

    組件需求 上傳圖片到騰訊云Cos服務器 可以顯示傳入的圖片地址 可以刪除傳入的圖片地址 可以上傳圖片到云服務器 上傳到騰訊云之后,可以返回圖片地址,顯示 上傳成功之后,可以回調(diào)成功函數(shù) 需要使用借助一個插件,幫助我們上傳圖片資源到騰訊云Cos 使用element的el-upl

    2023年04月17日
    瀏覽(69)
  • vue項目element-ui上傳組件自定義方法無法獲取進度

    原因:element-ui中的up-load組件使用時,若用自定義上傳http-request,會重新申明XMLHttpRequest,on-progress里的申明則被覆蓋,無法使用該鉤子,無法添加進度條 方案一:假進度條;寫個假進度條優(yōu)化用戶體驗,使用el-upload組件里on-change方法的status狀態(tài),配合定時器 ,以vue3為例 ,

    2024年02月15日
    瀏覽(24)
  • Element-UI的Upload 上傳文件

    Element-UI的Upload 上傳文件

    \\\"element-ui\\\": \\\"^2.15.9\\\" Upload 上傳官方文檔 2.1 自動上傳 限制一次只能上傳一個文件,并判斷上傳的文件大小及文件類型; 自動上傳:即選擇文件后即開始校驗,校驗通過后調(diào)接口上傳到服務器 2.2 手動上傳 限制一次只能上傳一個文件,并判斷上傳的文件大小及文件類型; 手動上

    2024年02月11日
    瀏覽(22)
  • element-ui上傳文件 + 攜帶參數(shù)案例

    element-ui上傳文件 + 攜帶參數(shù)案例

    ?js邏輯代碼 失敗響應的數(shù)據(jù): 成功響應的數(shù)據(jù): ? ? 參考文章 :https://www.cnblogs.com/lvhanghmm/p/15038986.html

    2024年02月05日
    瀏覽(23)
  • Element-ui upload 手動上傳文件

    (隨手一發(fā),可以拿過來就用,不做解釋看不懂的可以照搬,??代碼可復制??) ? ?

    2024年02月11日
    瀏覽(25)
  • 【element-ui組件】一.圖像組件;二.導航菜單(NavMenu);三.上傳組件:Upload;四.分頁組件

    目錄 一.圖像組件 二.導航菜單(NavMenu) 1.導航方向:通過model屬性來設置 2.菜單項: 三.上傳組件:Upload 四.分頁組件 1.實現(xiàn)分頁的方式: (1)服務器端分頁:通過底層的數(shù)據(jù)庫來實現(xiàn),前端會頻繁的和服務器交互,客戶端每次請求的是分頁的數(shù)據(jù)而不是所有數(shù)據(jù)

    2023年04月24日
    瀏覽(23)
  • 使用element-ui的Upload 上傳文件

    使用element-ui的Upload 上傳文件

    使用Upload 進行文件上傳 https://element.eleme.cn/#/zh-CN/component/upload 注:當文件和一些其他數(shù)據(jù)(姓名,年齡)進行一起上傳時候可分為兩種過程 第一種:單獨的文件上傳地址,上傳完文件后,后端返回該文件的地址,前端將該地址同其他數(shù)據(jù)(姓名,年齡)再次上傳。 第二種:

    2024年02月12日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包