热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

微信小程序与django后端的图片传输、存储与访问

一、小程序传输图片到后端使用api:wx.chooseMedia(选择本地照片拍摄照片),wx.uploadFile(上传文件)wx.chooseMedia:https:devel

一、小程序传输图片到后端

使用api:wx.chooseMedia (选择本地照片/拍摄照片), wx.uploadFile (上传文件)

wx.chooseMedia:


https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseMedia.html


wx.uploadFile:


https://developers.weixin.qq.com/miniprogram/dev/api/network/upload/wx.uploadFile.html


1. js文件,添加存放图片本地路径的属性

data: {
filePath:
"../../../image/blankimg.jpeg"
},

2. 选择图片

uploadImg(){
var that = this
wx.chooseMedia({
count:
1, //一次性上传个数
mediaType:['image'], //image or video or both
sizeType:['compressed'], //是否压缩图片
success:(res)=>{
console.log(res.tempFiles)
that.setData({
//设置filePath
filePath:res.tempFiles[0].tempFilePath
})
}
})
},

3. 上传图片,使用选择图片时获取的本地路径。文件传输到后端使用字典格式{name: file,name: file},字典的key值就是在api中设置的'name'。

submit(){
  var that = this
  
var time = util.formatTime(new Date())
  var name = time.substring(0,10).replaceAll('/','')+time.substring(11)

  wx.uploadFile({
    filePath: that.data.filePath,
//图片本地路径
    name: name, //图片名 作为在后端提取图片文件的key
    
url: app.globalData.url + 'english/upload_img', // 后端接口
    formData:{ // 传输一些需要的数据
name:name,
id : res.data.task_id
    },
    success:(res)
=>{
console.log(res)
if(res.statusCode==200){
wx.showToast({
title:
'创建成功',
})
setTimeout(
function(){
wx.navigateTo({
url:
'../chooseTasker/chooseTasker?task_id='+id,
})
},
2000)
}
    }
})
}

 

二、django后端接收图片并存储

1. 设置settings.py,在底部添加以下两行。MEDIA_ROOT是项目中保存上传的文件的根目录,MEDIA_URL是要访问存放文件目录时使用的地址。

MEDIA_ROOT = os.path.join(BASE_DIR, 'img')
MEDIA_URL
= '/media/'

2. 设置根urls.py。

from django.contrib import admin
from django.urls import path, include
from django.conf.urls.static import static # 添加本行
from django.conf import settings # 添加本行

urlpatterns
= [
path(
'admin/', admin.site.urls),
path(
'english/',include('pp_english_server.urls'))
]
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # 将文件路径添加进来

3. models

在django的模型中支持ImageField的存储。一定要记得设置upload_to,这里表示图片将被存放在根目录下的哪一个文件夹中,若没有该文件夹则会自动创建。例如,现在代码中设置的图片存储路径是img/taskimg。

class Task(models.Model):
id
= models.AutoField(primary_key=True)
create_time
= models.DateTimeField(null=True)
words
= models.TextField(validators=[validate_comma_separated_integer_list],max_length=255,null=True)
due_date
= models.DateField(null=True)
creator
= models.CharField(max_length=20)
title
= models.CharField(max_length=255)
message
= models.CharField(max_length=255, null=True)
image
= models.ImageField('表情',upload_to="taskimg",null=True) # 使用ImageField upload_to必不可少

4. 迁移模型

每次更改models都要进行迁移

在终端进入项目所在目录,依次执行以下命令

python manage.py makemigrations
python manage.py migrate

5. 接收图片接口,django接收到的文件将是InMemoryUploadedFile格式,此格式可以直接存储到ImageField中。

@api_view(['POST'])
def upload_img(request):
if request.method == 'POST':print(request.FILES)
id
= request.data['id']
name
= request.data['name'] # 提取文件的key
img = request.FILES[name] # 提取文件本身
task = Task.objects.filter(id=id)[0]
task.image.save(name,img)
# 将文件存储到数据库中 格式:model.column.save(name,file)
if Task.objects.filter(id=id)[0].image is not None:
return Response('success')
return Response()

触发该接口,可以发现图片成功存储在项目根目录下img的taskimg文件夹中

数据库中也存入了图片的名字

 

 

 

 

三、小程序端使用已上传的图片

1. 后端接口,将图片的根目录访问url和文件名传给前端,用于组合成图片的网络地址

@api_view(['POST'])
def get_task_content(request):
if request.method == 'POST':
task_id
= request.data['taskId']
task
= Task.objects.filter(id=task_id)[0]
res
={}
res[
'image']=str(task.image) # 取出存储在数据库中的图片名,转为字符串格式
res['root'] = 'media' # 图片根目录的访问地址
res['words'] = eval(task.words)
words
= eval(task.words)
res[
'title'] = task.title
return Response(res)

2. 在js文件的data中,添加存储图片网络地址的属性

data: {
image:
""
},

3. 前端请求中,在数据返回后组合成图片的网络地址(服务器地址+图片根目录访问url+图片名称)

onLoad(){
  var that = this
  wx.request({
url: app.globalData.url
+ 'english/get_task_content',
method:
'POST',
data:{
taskId : taskId
},
success:(res)
=>{
console.log(res)
that.setData({
title:res.data.title,
message:res.data.message,
words:res.data.words,
image:app.globalData.url
+ res.data.root + '/' + String(res.data.image) // 组合成图片的网络地址
})
}
})
}

4. 在wxml中绑定this.data.image。可以使用mode="widthFix"设置图片宽度固定,图片高度将随图片宽度等比例适应。

<image mode="widthFix" src="{{image}}">image>

此时已实现微信小程序与django后端之间的图片传输、存储、访问。

 



推荐阅读
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 小程序自动授权和手动接入的方式及操作步骤
    本文介绍了小程序支持的两种接入方式:自动授权和手动接入,并详细说明了它们的操作步骤。同时还介绍了如何在两种方式之间切换,以及手动接入后如何下载代码包和提交审核。 ... [详细]
  • 手把手教你使用GraphPad Prism和Excel绘制回归分析结果的森林图
    本文介绍了使用GraphPad Prism和Excel绘制回归分析结果的森林图的方法。通过展示森林图,可以更加直观地将回归分析结果可视化。GraphPad Prism是一款专门为医学专业人士设计的绘图软件,同时也兼顾统计分析的功能,操作便捷,可以帮助科研人员轻松绘制出高质量的专业图形。文章以一篇发表在JACC杂志上的研究为例,利用其中的多因素回归分析结果来绘制森林图。通过本文的指导,读者可以学会如何使用GraphPad Prism和Excel绘制回归分析结果的森林图。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 大坑|左上角_pycharm连接服务器同步写代码(图文详细过程)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了pycharm连接服务器同步写代码(图文详细过程)相关的知识,希望对你有一定的参考价值。pycharm连接服务 ... [详细]
  • 起因由于我录制过一个小程序的课程,里面有消息模板的讲解。最近有几位同学反馈官方要取消消息模板,使用订阅消息。为了方便大家容易学 PythonFlask构建微信小程序订餐系统 课程。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • AFNetwork框架(零)使用NSURLSession进行网络请求
    本文介绍了AFNetwork框架中使用NSURLSession进行网络请求的方法,包括NSURLSession的配置、请求的创建和执行等步骤。同时还介绍了NSURLSessionDelegate和NSURLSessionConfiguration的相关内容。通过本文可以了解到AFNetwork框架中使用NSURLSession进行网络请求的基本流程和注意事项。 ... [详细]
  • 在tp5项目中引入ueditor编辑器并实例化后插入图片出现目录创建失败问题在查看网络上各种解决方案之后总结如下:根据官网提示主要是因为图片保存的路径无权限导致,官方文档链接:ht ... [详细]
  • java io换行符_Java IO:为什么从stdin读取时,换行符的数字表示出现在控制台上?...
    只是为了更好地理解我在讲座中听到的内容(关于Java输入和输出流),我自己做了这个小程序:publicstaticvoidmain(String[]args)thro ... [详细]
  • 西安小程序开发,小程序制作,一个后台管理多端小程序功能性
    小程序已经发展4年多时间大全app下载汅api免费安卓。从最初简单demo到现在底层api接口。让我们的小程序和APP一样可以轻松的操作硬件信息。对于调取手机硬 ... [详细]
author-avatar
mobiledu2502928483
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有