Django+vue上传文件并返回文件在服务器中的路径

11 篇文章 1 订阅

文章目录

vue

用了element ui的el-upload组件

1.HTML代码

<!--index.vue-->
<el-upload
              class="upload-demo"
              :action="uploadZip()"
              :on-success="getFilePath"
              :file-list="fileList">
              <el-button size="small" type="primary">点击上传</el-button>
              <div slot="tip" class="el-upload__tip">请上传项目文件或者压缩包</div>
</el-upload>

action属性是个字符串,内容是后端处理上传文件的接口
on-success是在文件上传成功后自动调用的,这里主要是用于获取文件上传后在服务器中的路径

2.script代码
下面的this.$server需要在main.js中定义,是我们服务器的基地址和端口,比如:

Vue.prototype.$server = 'http://127.0.0.1:8000/'

然后就是两个函数的实现

//index.vue
getFilePath(response){
        console.log(this.$server+response.path)
      },
uploadZip(){
        return this.$server+'upload_problemZip/'
},

Django

先看一眼项目结构:
在这里插入图片描述

1.项目名文件夹下面的urls.py文件(djangoProject1/urls.py):

urlpatterns = [
    path('upload_problemZip/', views.upload_problem_zip),  # 需要加入这行
]

2.应用文件夹下的models.py(problem/models.py):

class SaveProblemZip(models.Model):
    create_time = models.DateTimeField(u"上传时间")
    file_url = models.FileField(upload_to='ProblemZip')

3.problem/views.py:

# 上传problem表单文件中的文件
def upload_problem_zip(request):
    data = request.FILES.get('file')
    print('-'*10, type(data))
    create_time = timezone.now().strftime("%Y-%m-%d %H:%M:%S")
    SaveProblemZip.objects.create(create_time=create_time, file_url=data)
    print("666666666666,path=", data)
    return render_json({"path": "ProblemZip/"+str(data)})

这个render_json是个自定义函数,如下:

# 相当于定义了一个HttpResponse返回对象,这样vue中的函数(在这个例子中是getFilePath)才可以接受后端返回的数据
def render_json(data, status=200):
    return HttpResponse(json.dumps(data), content_type="text/json", status=status)

应该没什么问题了,有问题欢迎评论区提问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值