element-ui upload組件上傳


方法一:

<el-table-column label="操作">
    <template slot-scope="scope">
        <el-button icon="el-icon-circle-plus-outline" type="primary" v-on:click="addOp(scope.row)"></el-button>
        <el-button type="primary" v-on:click="importQuato(scope.row)">導入額度批次表</el-button>
    </template>
</el-table-column>
<el-button type="primary" v-on:click="importQuato(scope.row)">導入額度批次表</el-button>//導入按鈕
scope.row可以獲取每一列的id  

<el-dialog :title="title" :visible.sync="dialogVisible">
        <el-upload
                class="upload-demo"
                drag
                class='ensure ensureButt'
                action="123" //這里可以隨意不影響
                :before-upload="beforeAvatarUpload" //上傳前文件校驗
                multiple>
            <i class="el-icon-upload"></i>
            <div class="el-upload__text">將文件拖到此處,或<em>點擊上傳</em></div>
            <div class="el-upload__tip" slot="tip">只能上傳xls、xlsx文件,且不超過10MB</div>
        </el-upload>
        <div slot="footer" class="dialog-footer">
            <!--<el-button v-on:click="dialogVisible = false">取 消</el-button>-->
            <el-button type="primary" v-on:click="dialogVisible = false">確 定</el-button>
        </div>
    </el-dialog>  
// 上傳前對文件的大小的判斷
            beforeAvatarUpload (file) {
                var fileName=new Array()
                fileName =file.name.split('.');
                const extension = fileName[fileName.length-1] === 'xls'
                const extension2 =  fileName[fileName.length-1]=== 'xlsx'
                const isLt2M = file.size / 1024 / 1024 < 10
                if (!extension && !extension2) {
                    this.$message({
                        message: '上傳模板只能是xls、xlsx格式!',
                        type: 'warning'
                    });
//                    console.log('上傳模板只能是xls、xlsx格式!')
                }
                if (!isLt2M) {
                    this.$message({
                        message: '上傳模板大小不能超過 10MB!',
                        type: 'warning'
                    });
//                    console.log('上傳模板大小不能超過 10MB!')
                }
                if (extension || extension2 && isLt2M == true) {
                    console.log(file)
                    let fd = new FormData()
                    fd.append('invoiceTypeId', this.invoice_type_id)//隨文件上傳的其他參數
                    fd.append('epid', this.epid)
                    fd.append('file', file)
                    // console.log(fd)
                    this.newImport(fd).then(function (res) {//校驗完成后提交
                        console.log(res)
                    }, function () {
                        console.log('failed');
                    });
                    return true
                }
                return extension || extension2 && isLt2M
            },
            //提示信息
            open: function (msg, code) {
                if (code == '000') {
                    this.$alert(msg, '提示', {
                        confirmButtonText: '確定',
                        type: 'success',
                        callback: action => {
                            this.dialogFormVisible = false;
                            location.reload();
                        }
                    });
                } else {
                    this.$alert(msg, '提示', {
                        confirmButtonText: '確定',
                        type: 'error',
                        callback: action => {
                            this.dialogFormVisible = false;
                            location.reload();
                        }
                    });
                }
            },
            newImport (data) {
                this.$http.post('../enterPriseQuota/importEnterPriseQuota', data).then(function (res) {//成功后回調
                    let code = res.data.returncode;//返回json結果
                    let msg = res.data.msg;
                    this.open(msg, code);
                    console.log('success');
                }, function () {
                    console.log('failed');
                });
            },
        }
 @RequestMapping("/importEnterPriseQuota")
    @ResponseBody
    public Map importEnterPriseQuota(@RequestParam(value = "invoiceTypeId") String invoiceTypeId,
                                     @RequestParam(value = "epid") String epid,
                                     @RequestParam("file") MultipartFile proFile, HttpServletRequest request) {
        String fileDir = request.getSession().getServletContext().getRealPath("/tmp");
        File dir = new File(fileDir);
        Map resMap = null;
        File file = null;
        try {
            file = new File(fileDir, proFile.getOriginalFilename());
            if (!dir.exists()) {
                dir.mkdir();
            }
            if (!file.exists()) {
                file.createNewFile();
            }
            proFile.transferTo(file);
            Date a = new Date();
            resMap = enterPriseQuotaService.importEnterPriseQuato(invoiceTypeId,file,epid);
            Date b = new Date();
            log.info("************all_time*************************" + (b.getTime() - a.getTime()));
            return resMap;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (file != null && file.exists()) {
                file.delete();
            }
        }
        resMap.put("returncode", "999");
        resMap.put("msg", "程序異常,請聯系管理員");
        return resMap;
    }

方法二:

<el-dialog :title="tagName" :visible.sync="dialogVisible">
        <el-upload
                class="upload-demo"
                drag
                class='ensure ensureButt'
                :action="importFileUrl"//在初始時指定url地址即可
                :on-error="uploadError"
                :on-success="uploadSuccess" 
                :before-upload="beforeAvatarUpload"
                multiple>
            <i class="el-icon-upload"></i>
            <div class="el-upload__text">將文件拖到此處,或<em>點擊上傳</em></div>
            <div class="el-upload__tip" slot="tip">只能上傳xls、xlsx文件,且不超過10MB</div>
        </el-upload>
        <div slot="footer" class="dialog-footer">
            <!--<el-button v-on:click="dialogVisible = false">取 消</el-button>-->
            <el-button type="primary" v-on:click="dialogVisible = false">確 定</el-button>
        </div>
    </el-dialog>
//有時候 :on-success,:on-error 這個函數會無法調用,之前看另一個帖子是用的:onError="uploadError" :onSuccess="uploadSuccess"
http://blog.csdn.net/qq_39685062/article/details/77036582

2018-01-12: 昨天又遇到上傳成功但是無法調用成功回調函數的問題,這里涉及到vue的生命周期,導致無法調用,js也不會報錯,把對應函數放到methods頂部可解決。

 // 上傳成功后的回調
            uploadSuccess (response) {
                let code = response.returncode;
                let msg = response.msg;
                this.open(msg, code);
            },
            // 上傳錯誤
            uploadError (response) {
                this.open("500", "文件導入異常!");
            },
 @RequestMapping("inEmployee")
    @ResponseBody
    public Map inEmployee(HttpServletRequest servletRequest) {
        MultipartHttpServletRequest request = (MultipartHttpServletRequest) servletRequest;
        Iterator<String> itr = request.getFileNames();
        MultipartFile proFile = null;
        while (itr.hasNext()) {
            String str = itr.next();
            proFile = request.getFile(str);
        }
        String fileDir = request.getSession().getServletContext().getRealPath("/tmp");
        File dir = new File(fileDir);
        Map resMap = null;
        File file = null;
        try {
            file = new File(fileDir, proFile.getOriginalFilename());
            if (!dir.exists()) {
                dir.mkdir();
            }
            if (!file.exists()) {
                file.createNewFile();
            }
            proFile.transferTo(file);
            Date a = new Date();
            resMap = employeeService.insEm(file,fileDir);
            Date b = new Date();
            log.info("************all_time*************************" + (b.getTime() - a.getTime()));
            return resMap;
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (file != null && file.exists()) {
                file.delete();
            }
        }
        resMap.put("returncode", "999");
        resMap.put("msg", "程序異常,請聯系管理員");
        return resMap;
    }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM