微信小程序UploadFile后台存储处理 Django+python

在Django后台进行图片保存时,遇到无法直接把图片的二进制数据存入数据库问题。
阅读相关资料后得出如下结论
数据库后台存储图片可以分为两种:

//小程序
 wx.uploadFile({
                url: app.golobaData.serverUrl + app.golobaData.apiVersion + '/service/image',
                filePath: that.data.needup_image.image_path,  //通过选择按钮获取的图片地址
                name: 'image',                                // key
                formData: {
                  'image_width': that.data.needup_image.image_width,
                  'image_height': that.data.needup_image.image_height,
                  'image_type': that.data.needup_image.image_type
                },
                success: function (res) {
                  console.log(res)
                },
                fail(res) {
                  console.log(res)
                },
                complete(res) {
                  console.log(res)
                }
              })

方法1.把图片内容保存在服务器本地,数据库保存图片的存储路径(示例小程序端传一张图片)

'''服务器'''
'''获取POST到服务器的文件对象'''
def img(request)
    if request.method == "POST":
        files = request.FILES
		'''
		 需要通过小程序端的key(image)获取二进制数据
		 获取文件内容
		'''
        content = files.get('image',None).read();        
        '''
        设置保存路径
            settings.IMAGES_DIR 已经默认设定
            默认保存文件名字为aaa.jpg
        '''
        path = os.path.join(settings.IMAGES_DIR,'aaa.jpg') 
        with open(path,'wb') as f:
            f.write(content)            '''保存图片到本地'''

方法2:把图片内容直接保存到数据库的BLOB

'''服务器'''
'''获取POST到服务器的文件对象'''
def img(request)
    if request.method == "POST":
        files = request.FILES
        '''数据库model模型类初始化'''
        save_image = Businessdetail()   
        '''
        通过key获取文件二进制内容,并读取给数据库
            businessdetail_image_data = models.BinaryField(db_column='image_data')
            需要通过小程序端的key(image)获取二进制数据
        '''
        save_image.businessdetail_image_data = files.get('image',None).read(); 
        '''    保存图片文件到数据库'''
        save_image.save()   

知识点:
HttpRequest.FILES
返回一个包含了所有的上传文件的 QueryDict 对象。通过表单所上传的所有 文件 都会保存在该属性中。
key的值是input标签中name属性的值,value的值是一个UploadedFile对象

QueryDict  是一个类似于Python中字典的一种对象,他是Python中字典的子类,所以继承了字典的所有方法 

      QueryDict.get(key,default=None)   返回key所对应的value,若key不存在,则返回default的值
      QueryDict.update(other_dict)       更新
      QueryDict.values()                   列出所有的值
      QueryDict.items()                  列出所有的键值对,若一个key有多个值,只显示最后一个值。
      QueryDict.pop(key)                   删除某个键值对
      QueryDict.getlist(key)               根据输入的key返回一个Python中的list
      QueryDict.dict()                   返回QueryDict的字典的表现形式UploadedFile 对象
UploadedFile  是类文件对象,具有以下方法和属性:
      UploadedFile.read()                  读取整个上传文件的数据,文件较大时慎用
      UploadedFile.multiple_chunks(chunk_size=None)          判断文件是否足够大,一般为2.5M
      UploadedFile.chunks(chunk_size=None)             返回一个生成器对象,当multiple_chunks()为True时,应该使用这个方法代替read()
      UploadedFile.name                    上传文件的名字
      UploadedFile.size                    上传文件的大小
      UploadedFile.content_type            上传文件时的content_type报文头
      UploadedFile.charset               字符集
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值