Flask,Django 上传文件到本地及上传七牛云空间

13 篇文章 3 订阅

Flask:

# 上传文件
class UploadView(Resource):
    def post(self):
        img = request.files.get('img')
        if not img:
            return jsonify({
                'code': 400, 'msg': '没有接收到文件'
            })
        filename = datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')
        filename += str(random.randint(100000, 999999))
        filename += '.'
        filename += img.filename.split('.')[-1]
        img.save('./static/' + filename)
        # img.save(os.path.join('static', filename))

        from qiniu import Auth, put_file

        # 需要填写你的 Access Key 和 Secret Key
        access_key = 'v4JRKhMbX_X3n5WNvxCSmWYzqiNs3jzG_KJedmrR'
        secret_key = 'uDv2qMfPCJmJDZ5DgYhx8iGgUPGXm6B3zfzeaD0R'
        # 构建鉴权对象
        q = Auth(access_key, secret_key)
        # 要上传的空间
        bucket_name = 'flask11'
        # 上传后保存的文件名
        key = 'static/' + filename
        # 生成上传 Token,可以指定过期时间等
        token = q.upload_token(bucket_name, key, 3600)
        # 要上传文件的本地路径
        localfile = './static/' + filename
        info = put_file(token, key, localfile)
        print(info)
        if info[0]['key'] == key:
            return jsonify({
                'code': 200, 'msg': '上传成功',
                'data': {
                    'filename': key
                }
            })
        else:
            return jsonify({
                'code': 400, 'msg': '上传失败'
            })

Django上传 之修改头像 / 前后端:

# 用户上传头像
class UploadView(APIView):
    def post(self, request):
        file_img = request.FILES.get('file_img')
        if not file_img:
            return Response({
                'code': 400, 'msg': '没有接收到文件'
            })
        file_name = file_img.name  # 获取文件名
        # s = os.path.splitext(file_name)[0]  # 121645B2jAV
        # b = os.path.splitext(file_name)[1]  # .jpg
        suffix = file_name[file_name.rfind('.') + 1:]  # rfind获取文件后缀名
        file_format = ['pdf', 'PDF', 'jpg', 'JPG']  # 设置文件格式要求
        if suffix in file_format:
            filename = datetime.strftime(datetime.now(), '%Y%m%d%H%M%S')
            filename += str(random.randint(10000, 99999))
            filename += '.'
            filename += suffix
            # 从配置文件中载入图片保存路径
            IMG_DIRS = settings.STATICFILES_DIRS
            img_path = os.path.join(IMG_DIRS[0], filename)
            # 写入文件到本地
            with open(img_path, 'ab') as f:
                # 如果上传的图片非常大,就通过chunks()方法分割成多个片段来上传
                for chunk in file_img.chunks():
                    f.write(chunk)

            # 上传七牛云
            from qiniu import Auth, put_file, etag
            import qiniu.config
            # 需要填写你的 Access Key 和 Secret Key
            access_key = 'v4JRKhMbX_X3n5WNvxCSmWYzqiNs3jzG_KJedmrR'
            secret_key = 'uDv2qMfPCJmJDZ5DgYhx8iGgUPGXm6B3zfzeaD0R'
            # 构建鉴权对象
            q = Auth(access_key, secret_key)
            # 要上传的空间
            bucket_name = 'zxdjango'
            # 上传后保存的文件名
            key = 'static/' + filename
            # 生成上传 Token,可以指定过期时间等
            token = q.upload_token(bucket_name, key, 3600)
            # 要上传文件的本地路径
            localfile = './static/' + filename
            info = put_file(token, key, localfile)
            print(info)
            if info[0]['key'] == key:
                return Response({
                    'code': 200, 'msg': '上传成功',
                    'data': {
                        'filename': key
                    }
                })
            else:
                return Response({
                    'code': 400, 'msg': '上传失败'
                })
        return Response({
            'code': 400, 'msg': '请上传pdf或jpg格式的文件'
        })
# 用户信息
class UserInfo(APIView):
    # 展示用户信息
    @check_login
    def get(self, request):
        info = UserModel.objects.filter(id=request.user_id).first()
        dic = {
            'name': info.name,
            'photo': info.photo,
            'phone': info.phone,
        }
        return Response({
            'code': 200, 'msg': '用户信息获取成功',
            'data': dic
        })

    # 用户修改信息
    @check_login
    def put(self, request):
        name = request.data.get('name')
        phone = request.data.get('phone')
        photo = request.data.get('photo')
        info = UserModel.objects.filter(id=request.user_id).first()
        if name:
            info.name = name
        if phone:
            info.phone = phone
        if photo:
            info.photo = photo
        info.save()
        return Response({
            'code': 200, 'msg': '用户信息修改成功'
        })
urlpatterns = [
    path('upload/', views.UploadView.as_view()),
    path('userinfo/', views.UserInfo.as_view()),
]

前端对接:

<template>

         <el-upload
            action="http://127.0.0.1:8000/friendcircle/upload/"
            name="file_img"
            :show-file-list="false"
            :on-success="uploadAct"
          >
            <el-avatar
              :size="60"
              v-if="userinfo.photo"
              :src="imageUrl + userinfo.photo"
            ></el-avatar>
            <el-avatar
              :size="60"
              v-else
              :src="require('@/assets/02.png')"
            ></el-avatar>
         </el-upload>

</template>

<script>

data() {
    return {
      imageUrl: "http://rnywebpao.sabkt.gdipper.com/",
      filename: "",
      userinfo: [],
    };
  },

mounted() {
  this.UserInfo();
},

methods: {
  methods: {
    //修改头像
    uploadAct(resp) {
      console.log(resp);
      if (resp.code == 200) {
        this.photo = resp.data.filename;
        axios
          .put(
            "/friendcircle/userinfo/",
            { photo: this.photo },
            { headers: { token: localStorage.getItem("token") } }
          )
          .then((res) => {
            if (res.data.code == 200) {
              this.$message(res.data.msg);
              location.reload();
            }
          })
          .catch((err) => {
            console.log(err);
          });
      }
    },
    
    //挂载用户信息
    UserInfo() {
      axios
        .get("/friendcircle/userinfo/", {
          headers: {
            token: localStorage.getItem("token") || "",
          },
        })
        .then((resp) => {
          console.log(resp);
          this.userinfo = resp.data.data;
        })
        .catch((err) => {});
    },
    logout() {},
  },

</script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值