el-upload上传多个文件,一次请求,Django接收

1、:file-list="fileList" :on-change="handleChange" 将文件赋值到fileList

2、 :auto-upload="false" 手动触发上传 写个按钮点击执行这个 this.$refs.upload.submit();

3、自己写上传,不会再触发上传成功或失败回调

4、 request.FILES.getlist('file') 获取上传的多个文件,循环读取写入文件中

复制代码
 <el-upload
     class="upload-demo"
     ref="upload"
     action=""
     :on-change="handleChange"
     :file-list="fileList"
     :auto-upload="false"

     >
     <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
     <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
     <div slot="tip" class="el-upload__tip">只能上传jmx/txt文件</div>
</el-upload>

<script>
    import axios from 'axios'
    export default{
        name:"StressTest",
            data() {
                     return {
                     fileList: []
                     }
            },
            components:{

            },
          
            methods:{
              handleChange(file, fileList) {
                console.log(file, fileList);
                this.fileList = fileList
                console.log('=====',this.fileList)
              },
              submitUpload() {  //上传
                    let formData = new FormData();  //  用FormData存放上传文件
                    this.fileList.forEach(file => {
                        formData.append('file', file.raw)
                    })
                    this.fileList = []
                    console.log('========',formData)
                    this.$axios.post('/uploadfile/', formData).then((res) => {
                        //手动上传无法触发成功或失败的钩子函数,因此这里手动调用
                      console.log('========','success')
                     
                       this.handleUploadSuccess()
                    }, (err) => {
                     
                       this.handleUploadError()
                    })
                },


               handleUploadSuccess(){
                this.$refs.upload.clearFiles()
                alert('上传成功')
               
                },
              handleUploadError(){
                 alert('上传失败')
             }

           // methods关闭
            }
    }
</script>

下面试着还是上次触发多次请求呢

复制代码
<el-upload
    class="upload-demo"
    ref="upload"
    action=""
    :on-change="handleChange"
    :on-success="handleUploadSuccess"
    :on-error="handleUploadError"
    :file-list="fileList"
    :auto-upload="false"
    :http-request="uploadFile"
    >
    <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
    <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
    <div slot="tip" class="el-upload__tip">只能上传jmx/txt文件</div>
</el-upload>


<script>
    import axios from 'axios'
    export default{
        name:"StressTest",
            data() {
                     return {
                     fileList: []
                    
                     }
            },
            components:{

            },
           
            methods:{
              submitUpload() {
                  this.$refs.upload.submit();
                },
              handleChange(file, fileList) {
                console.log(file, fileList);
                this.fileList = fileList
                console.log('=====',this.fileList)
              },
              uploadFile(file) {  //上传
                    let formData = new FormData();  //  用FormData存放上传文件
                    this.fileList.forEach(file => {
                        formData.append('file', file.raw)
                    })
                    console.log('========',formData)
                    this.$axios.post('/uploadurl/', formData).then((res) => {
                        //手动上传无法触发成功或失败的钩子函数,因此这里手动调用
                      console.log('========','success')
                       file.onSuccess(res)
                    }, (err) => {
                      file.onError(err)
                    })
              },


              handleUploadSuccess(response, file, fileList){
                this.$refs.upload.clearFiles()
                alert('上传成功')

              },
              handleUploadError(err, file, fileList){
                 alert('上传失败')
              }
         // methods关闭
         }
    }
</script>

def add_stressfile(request):
    data = {}
    for i in request.POST.lists():
        data[i[0]] = i[1][0]
    myFiles = request.FILES.getlist('file')
    print(myFiles)
    now = datetime.now()

    for myFile in myFiles:
        filename = str(now)[:-10].replace(' ', '_').replace(':', '') +'.txt'
        print(filename)
        file_path = os.path.join(settings.STRESS_ROOT, filename)
        fp = open(file_path, 'wb+')
        for i in myFile.chunks():
            # print(i)
            fp.write(i)
        fp.close()
       
    return HttpResponse(json.dumps({}), content_type='application/json')
相关推荐
小白勇闯网安圈2 小时前
Django 响应对象、文件上传与类视图
数据库·django·sqlite
java1234_小锋4 小时前
Vue3专题 - 组件基础
vue.js·vite
阿懂在掘金10 小时前
同一份弹窗我重构了三次:从 v-model 地狱到路由式调用,终于治好了模板臃肿
前端·vue.js·前端框架
小白勇闯网安圈11 小时前
Django 模板复用、ORM 查询与多对多关系
数据库·python·django
小锋java123411 小时前
【技术专题】Vue3 - 生命周期
vue.js·vite
Highcharts.js12 小时前
Vue 3 + Highcharts Boost 可视化加速模块的完整示例
javascript·vue.js·可视化·boost·highcharts·图表渲染·加速模块
夏幻灵13 小时前
从语法坑点到 JS 内存底层:Vue 3 watch 侦听器深度全解
开发语言·javascript·vue.js
Sterting13 小时前
反馈组件:对话框、消息与通知
前端·javascript·vue.js
书中枫叶14 小时前
做了个「句拾」小程序,最难的不是业务,是字体
前端·javascript·vue.js
新时代牛马15 小时前
Vue.js 响应式原理详解
前端·javascript·vue.js