【愚公系列】《微信小程序与云开发从入门到实践》037-文件下载与上传
标题 | 详情 |
---|---|
作者简介 | 愚公搬代码 |
头衔 | 华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。 |
近期荣誉 | 2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主等。 |
博客内容 | .NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。 |
欢迎 | 👍点赞、✍评论、⭐收藏 |
🚀前言
随着小程序的不断发展,它们已经成为了用户日常生活中不可或缺的工具。无论是购物、社交还是信息分享,小程序都在其中发挥着重要的作用。在这些功能的背后,文件的下载与上传是实现数据交互和用户体验的重要环节。
在这篇文章中,我们将深入探讨如何在小程序中实现文件的下载与上传。我们将介绍相关的API使用方法、操作步骤、注意事项,以及一些最佳实践,帮助开发者更高效地处理文件操作。无论是用户上传图片、文档,还是从服务器下载资源,掌握这些技术都将为小程序的功能拓展提供强有力的支持。
🚀一、文件下载与上传
小程序开发框架中提供了文件的下载与上传相关接口,当需要上传某些本地数据到服务端或从服务端下载文件到本地时,使用这些接口进行开发会非常方便。在介绍下载与上传方法前,育先需要对小程序中的文件系统有简单的了解。
🔎1.小程序的文件系统
🦋1.1 小程序的文件系统概述
小程序拥有一套基于用户维度进行隔离的文件系统。由于微信本身是一个应用程序,同一台设备可以支持多个微信用户登录,因此小程序为每个用户分配独享的存储空间,确保用户的数据互不干扰。这就需要通过文件系统来管理。
小程序中的文件可以分为两类:
- 代码包中的文件:如页面文件、引入的资源文件等,在小程序打包发布时统一打包,使用时通过相对路径进行访问。
- 本地文件:这是我们在开发过程中更加关注的内容。
🦋1.2 本地文件的三类管理
(1)本地临时文件
- 特点:这类文件由开发框架自动产生,主要用于临时存储,存储内容会随着框架的运行进行管理和清理。
- 管理策略:
- 在运行时最多存储 4GB 内容。
- 若使用超过 2GB 时,系统会按使用时间从远到近依次清理文件,使得占用的内存回到 2GB 以内。
- 临时文件可能随时被回收和删除。
(2)本地缓存文件
- 特点:本地缓存文件是指通过小程序相关接口将临时文件缓存后生成的文件。
- 管理策略:
- 这类文件的 目录和文件名 无法自定义。
- 文件存储和本地用户文件共享存储空间,最多可存储 200MB。
- 存储容量有限制,且由小程序框架进行自动管理。
(3)本地用户文件
- 特点:这是指用户自己管理的文件,在开发中常常用于存储临时文件。
- 管理权限:
- 用户对这类文件有 很大的操作权限,可以自定义目录名和文件名。
- 开发者可以将临时文件存储到本地用户文件夹,提供更多的控制和灵活性。
- 这类文件的存储是由开发者通过接口管理,可以进行自由的读写操作。
🦋1.3 小程序存储管理的限制和注意事项
- 本地临时文件和本地缓存文件不能直接写入,它们的存储是由框架接口自行管理的。
- 存储空间和容量有一定限制,开发者需要注意存储的合理性,避免超出限制。
- 本地临时文件和本地缓存文件的清理机制会影响到用户数据,开发者应根据需求选择合适的文件类型存储重要信息。
🔎2.文件下载与上传接口
🦋2.1 图片文件下载与渲染
在小程序中,可以通过网络将图片文件下载到本地并进行渲染。下面是具体的操作流程:
☀️2.1.1 在 WXML 文件中添加下载按钮和图片组件
在 networkDemo.wxml
文件中,添加下载按钮和 image
组件,代码如下:
<!-- pages/networkDemo/networkDemo.wxml -->
<button type="primary" bindtap="download">下载文件</button>
<image src="{{imagePath}}"></image>
button
:点击按钮后触发download
方法,开始下载图片文件。image
:绑定imagePath
变量,下载成功后将图片渲染到页面。
☀️2.1.2 在 JS 文件中实现下载逻辑
在 networkDemo.js
文件中实现图片下载的逻辑。代码如下:
// pages/networkDemo/networkDemo.js
Page({
data: {
imagePath: "",
},
download: function () {
wx.downloadFile({
url: 'http://huishao.cc/img/head-img.png', // 下载文件的URL
filePath: wx.env.USER_DATA_PATH + "/1.png", // 保存到本地的路径
success: (res) => {
console.log(res);
this.setData({ imagePath: res.filePath }); // 下载成功,设置图片路径
},
fail: (error) => {
console.log(error); // 下载失败的回调
}
});
}
});
wx.downloadFile
:通过该接口下载文件,url
为资源文件的地址,filePath
为文件存储的本地路径。success
回调:下载成功后,将文件路径赋值给imagePath
,并渲染到image
组件上。fail
回调:下载失败时输出错误信息。
☀️2.1.3 下载进度监听
下载文件时,通常需要显示下载进度,可以使用 onProgressUpdate
方法监听下载进度。代码示例如下:
let downloadTask = wx.downloadFile({
url: "http://huishao.cc/img/head-img.png",
filePath: wx.env.USER_DATA_PATH + "/1.png",
success: (res) => {
console.log(res);
this.setData({ imagePath: res.filePath });
},
fail: (error) => {
console.log(error);
}
});
// 监听下载进度
downloadTask.onProgressUpdate((res) => {
console.log("资源总长度:", res.totalBytesExpectedToWrite);
console.log("已下载:", res.totalBytesWritten);
console.log("进度百分比:", res.progress);
});
onProgressUpdate
:监听下载进度,包括总长度、已下载大小和下载进度百分比。
🦋2.2 downloadFile
方法属性
wx.downloadFile
方法可以配置多个属性,用来控制下载的行为。常见的属性如下:
属性名 | 类型 | 说明 |
---|---|---|
url |
字符串 | 资源文件的 URL,指定要下载的文件地址。 |
filePath |
字符串 | 下载后文件的本地存储路径。若未设置,则会下载到临时文件路径。 |
header |
对象 | 请求头字段,可用于设置额外的 HTTP 请求头。 |
timeout |
数值 | 设置下载超时时间,单位为毫秒。 |
success |
函数 | 下载成功的回调方法。 |
fail |
函数 | 下载失败的回调方法。 |
complete |
函数 | 下载完成的回调方法,不论成功或失败都会调用。 |
☀️2.2.1 下载成功回调
下载成功后,会传入一个结果对象,包含以下属性:
属性名 | 类型 | 说明 |
---|---|---|
tempFilePath |
字符串 | 临时文件路径,若未设置 filePath ,则文件会存储在此路径。 |
filePath |
字符串 | 文件存储路径,与 filePath 参数一致。 |
statusCode |
数值 | 返回的 HTTP 状态码。 |
header |
对象 | 调试信息,包含请求头等信息。 |
timeout |
数值 | 超时时间设置。 |
🦋2.3 上传文件到服务器
上传文件使用 wx.uploadFile
方法,该方法会发起一个 HTTP POST 请求,用于将文件上传到服务器。
☀️2.3.1 wx.uploadFile
方法属性
属性名 | 类型 | 说明 |
---|---|---|
url |
字符串 | 服务器的 URL 地址,接收上传文件的接口。 |
filePath |
字符串 | 要上传的文件路径。 |
name |
字符串 | 上传文件对应的 key 值。 |
header |
对象 | 请求头字段,设置请求头。 |
formData |
对象 | 上传时附带的表单数据。 |
timeout |
数值 | 请求超时时间,单位毫秒。 |
success |
函数 | 上传成功的回调方法。 |
fail |
函数 | 上传失败的回调方法。 |
complete |
函数 | 上传完成的回调方法(无论成功或失败)。 |
☀️2.3.2 上传文件的回调
wx.uploadFile
方法与 wx.downloadFile
方法类似,上传文件成功后会返回一个 UploadTask
对象,该对象的方法与 DownloadTask
类似,包括进度监听等。
- 点赞
- 收藏
- 关注作者
评论(0)