Vue+Django上传文件

发布于:2024-06-03 ⋅ 阅读:(65) ⋅ 点赞:(0)

Vue部分,使用el-upload组件

<!--action必须要有,但是通过其他按钮触发,不通过submit()触发-->
<!--accept限制上传文件类型-->
<!--file-list绑定文件变量-->
<el-upload
  action=""
  :auto-upload="false"
  accept=".zip"
  :file-list="fileList"
  :on-change="fileChange"
>
  <el-button>选择压缩包</el-button>
</el-upload>
<el-button type="primary" @click="submitUpload">上传后端</el-button>

JS函数部分

submitUpload() {
  // 可以绑定refs通过submit提交
  // this.$refs.uploadPackage.submit()
  var formData = new FormData()
  formData.append('file', this.fileList[0].raw)  // 去文件列表第一个的raw属性!!!重点!!!
  formData.append('otherAttr', '其他属性')
  
  axios.post('http://127.0.0.1:8000/test/upload/', formData, {
    headers: {
      'Content-Type': 'multipart/form-data'   // 选择formData格式传输
    }
  })
},

Django部分

# Django的request对象会自动解析multipart/form-data编码的数据,并将它们填充到
# request.POST(对于非文件字段)
# request.FILES(对于文件字段)
def test(request):
    print('request.POST', request.POST)
    print('request.FILES', request.FILES)

    file = request.FILES.get('file')
    otherAttr = request.POST.get('otherAttr')
    
	# 可以将文件保存在对应路径
	savePath = BASE_DIR + r'\upload'
	fileObj = FileSystemStorage()
	fileObj.save(savePath, file)

网站公告

今日签到

点亮在社区的每一天
去签到