前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django实战-服务端图片上传

Django实战-服务端图片上传

作者头像
小团子
发布2019-09-03 18:43:05
1.8K2
发布2019-09-03 18:43:05
举报
文章被收录于专栏:数据云团数据云团

Django实战-小程序端图片上传

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

会发现上一节中的小程序端调用自带的选择图片上传接口,可以获取到图片的路径和图片的名字以及md5值。根据小程序助手的功能需要在服务端对图片上传接口实现上传、获取、更新、删除操作。对于这些操作同样可以用 View 类视图函数实现。

from django.views import View

一、上传图片文件

  // 上传图片文件
  uploadFiles: function() {
    var that = this
    that.setData({
      newBackupedFiles: []
    })
    // 读取文件路径
    for (var i = 0; i < this.data.needUploadFiles.length; i++) {
      var filePath = this.data.needUploadFiles[i]
      wx.uploadFile({
        url: app.globalData.serverUrl + app.globalData.apiVersion + '/service/image',
        filePath: filePath,
        name: 'test',
        success: function(res) {
          // 取出文件的名字和 nmd5
          var res = JSON.parse(res.data)
          var md5 = res.data[0].md5
          var name = res.data[0].name
          var newImageItem = {
            "md5": md5,
            "name": name
          }
          that.downloadFile(newImageItem)
        }
      })
    }
    wx.showToast({
      title: '上传成功',
    })
    // 把上传的列表清空
    this.setData({
      needUploadFiles: []
    })
  }

二、下载图片

// 下载图片
  downloadFile: function(imgItem) {
    // 通过函数的参数 imgItem,将 md5 传进来
    var that = this;
    wx.downloadFile({
      url: app.globalData.serverUrl + app.globalData.apiVersion + '/service/image' + "?md5=" + imgItem.md5,
      success: function(res) {
        
        // 临时路径
        var filepath = res.tempFilePath
        // var tmpPath = imgItem.md5
        
        var newDownloadedBackupedFiles = that.data.downloadedBackupedFiles
        
        // 取出图片路径
        imgItem.path = filepath
        
        // 容易出错
        newDownloadedBackupedFiles.unshift(imgItem)
        // newDownloadedBackupedFiles.push(tmpPath)
        that.setData({
          downloadedBackupedFiles: newDownloadedBackupedFiles
        })
        console.log(newDownloadedBackupedFiles)
      }
    })
  }

三、服务端图片上传

from django.http import FileResponse, JsonResponse
class ImageView(View, CommonResponseMixin):
    def get(self, request):
    
            return JsonResponse(data=response, safe=False)

    def post(self, request):
        # 获取文件
        # 取出文件的 key 和 value
        # 读取文件
        # 指定文件路径
        # 保存文件
        return JsonResponse(data=response, safe=False)

    def put(self, request):
    
        return JsonResponse(data=response, safe=False)

    def delete(self, request):
       
        return JsonResponse(data=response, safe=False)
def get(self, request):
    md5 = request.GET.get("md5")
        imgfile = os.path.join(settings.IMAGES_DIR, md5 + '.jpg')
    if os.path.exists(imgfile):
        data = open(imgfile, 'rb').read()
        return FileResponse(open(imgfile, "rb"), content_type="image/jpg")
    else:
        response = self.wrap_json_response(code=ReturnCode.RESOURCES_NOT_EXISTS)
        return JsonResponse(data=response, safe=False)
def post(self, request):
    # 获取文件
    files = request.FILES
    response = []
    # 取出文件的 key 和 value
    for key, value in files.items():
        # 读取文件
        content = value.read()
        md5 = hashlib.md5(content).hexdigest()
        # 指定文件路径
        path = os.path.join(settings.IMAGES_DIR, md5 + '.jpg')
        with open(path, 'wb') as f:
            # 保存文件
            f.write(content)
        response.append({
            "name": key,
            "md5": md5
        })
        message = 'post method success.'
    response = self.wrap_json_response(data=response, code=ReturnCode.SUCCESS, message=message)
    return JsonResponse(data=response, safe=False)
def put(self, request):
        message = "put method success"
    response = self.wrap_json_response(message=message)
    return JsonResponse(data=response, safe=False)
def delete(self, request):
    md5 = request.GET.get('md5')
    img_name = md5 + '.jpg'
    path = os.path.join(settings.IMAGES_DIR, img_name)
    if os.path.exists(path):
        os.remove(path)
        message = "remove success"
    else:
            message = "file(%s) not found." % img_name
    response = self.wrap_json_response(message=message, code=ReturnCode.SUCCESS)
    return JsonResponse(data=response, safe=False)
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档