当前位置:   article > 正文

HarmonyOS JS实现图片上传后端并调用_鸿蒙 上传图片

鸿蒙 上传图片

前言

鸿蒙中能实现图片上传的方法有很多,调用Java端实现的效果更好。本次是使用纯JS将图片转成base64编码并存储后端,之后转成图片保存调用路径下。

正文

1.创建鸿蒙JS端空项目

2.添加权限

  1. "reqPermissions": [
  2. {
  3. "name": "ohos.permission.DISTRIBUTED_DATASYNC"
  4. },
  5. {
  6. "name": "ohos.permission.GET_NETWORK_INFO"
  7. },
  8. {
  9. "name": "ohos.permission.SET_NETWORK_INFO"
  10. },
  11. {
  12. "name": "ohos.permission.INTERNET"
  13. },
  14. {
  15. "name": "ohos.permission.GET_WIFI_INFO"
  16. },
  17. ]
  1. "deviceConfig": {
  2. "default": {
  3. "network": {
  4. "cleartextTraffic": true
  5. }
  6. }
  7. },

3.创建页面文件并书写图片转换代码

我们主要使用的是canvas画布组件来完成图片转换的,该部分和JavaScript中的canvas差不多,只不过鸿蒙中已经为我们封装好了,我们只需调用,无需在赋值了。之后使用image对象对图片进行编辑并展示在canvas画布中,方便我们调用;最后我们使用toDataURL方法来获取图片的base64编码("data:image/png;base64,xxxxxxxx...")

  1. onShow(){
  2. var that = this
  3. var el =this.$refs.canvas;
  4. var ctx =el.getContext('2d');
  5. var img = new Image();
  6. img.src = 'common/images/bg-tv.jpg';
  7. img.onload = function() {
  8. console.log('Image load success');
  9. ctx.drawImage(img, 0, 0, 120, 100);
  10. that.dataURL = el.toDataURL();
  11. console.log(that.dataURL);
  12. that.title = that.dataURL;
  13. };
  14. img.onerror = function() {
  15. console.log('Image load fail');
  16. };
  17. },

4.base64编码传入python后端

所使用的是fetch数据请求以及querystring来进行数据传输。需要注意的是鸿蒙JS端是没有配备querystring的,我们需要在项目目录下进行下载。(npm install querystring)另外大家也需要准备云端服务器来进行base64编码的接收,因为鸿蒙真机是无法进行本地数据的相互存入的。

  1. reFresh(){
  2. fetch.fetch({
  3. url:`http://xxx.xx.xxx.xxx:8000/personal_info/getBase/`,//路径
  4. // data:JSON.stringify({'id':'1'}),
  5. data: qs.stringify({"title":this.dataURL}),
  6. //验证,转为字符串发给后台
  7. responseType:"json", //请求的参数类型
  8. method: "POST",
  9. success:(resp)=>
  10. {
  11. this.winfo = resp.data; //令获取到的数据赋给winfo
  12. console.log("返回的数据:"+this.winfo)//打印出数据
  13. },
  14. fail:(resp)=>
  15. {
  16. this.winfo = resp.data;
  17. console.log("获取数据失败:"+this.winfo)
  18. }
  19. });
  20. }

5.hml文件

  1. <div style="flex-direction: column;">
  2. <canvas ref="canvas" style="width: 500px; height: 300px; "></canvas>
  3. <button onclick="reFresh">点击</button>
  4. <text style="font-size: 1px;">{{title}}</text>
  5. </div>

6.后端部署django项目

分别使用 django-admin startproject + 项目名称 和 django-admin startapp + app名称 来搭建项目。之后在项目以及app url下创建路径,并在views中书写python后端接收代码。

项目url

   path('personal_info/', include(personal_info_urls, namespace='personal_info')),

app url

    path('getBase/',getBase.as_view())

views代码

  1. class getBase(APIView):
  2. def post(self, request):
  3. title = request.data.get("title") #接收前段传递的字符串
  4. print(title[22:]) #截取字符串中base64编码部分
  5. print("chenggong")
  6. print(title)
  7. with open("C:\\Users\\Administrator\\Desktop\\1.txt", 'w') as f: #将编码保存进文本中
  8. f.write(title[22:])
  9. f.close()
  10. with open("C:\\Users\\Administrator\\Desktop\\1.txt", 'r') as f: #编码转成图片并保存到指定路径下
  11. imgdata = base64.b64decode(f.read())
  12. file = open('C:\\pic\\upload\\8.png', 'wb')
  13. file.write(imgdata)
  14. file.close()
  15. with open("C:\\Users\\Administrator\\Desktop\\1.txt", 'r+') as file: #文本清空,方便下次使用
  16. file.truncate(0)
  17. try:
  18. return HttpResponse("信息录入成功")
  19. except pymysql.Error as e:
  20. print("信息录入失败" + e)

在命令行中启动django

python manage.py runserver 0.0.0.0:8000

7.后端部署tomcat

我们需要在云服务器中下载tomcat,之后我们打开tomcat文件目录下的conf -> server.xml,将最后一行中Context修改为图片调用路径

        <Context docBase="D:\pic\upload" reloadable="true" path="/pic" />

我们启动bin目录下的startup.bat,若可以出现下图中的编码块,则证明可以访问tomcat,在IE中输入http://localhost:8080,若出现下面网页,则部署成功。

 

 8.在鸿蒙真机操作

 指定路径下会有相同图片,并可以使用tomcat来调用图片 

例:8.png (300×200)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/282063
推荐阅读
相关标签
  

闽ICP备14008679号

        
cppcmd=keepalive&