微信小程序图片、视频上传、预览PDF

该博客主要介绍了微信小程序中预览图片、上传本地图片、使用相机拍摄、选择视频及预览PDF的功能实现。提供了相关函数的详细代码,包括wx.previewImage、wx.chooseImage、wx.uploadImage、wx.chooseVideo以及wx.openDocument等接口的使用,便于开发者进行小程序的多媒体和文件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * 图片预览
 * @ param url 链接
 */
 function previewOneImage(url) {
  var imgList = [url];//获取img-list
  //图片预览
  wx.previewImage({
    current: url, // 当前显示图片的链接
    urls: imgList // 需要预览的图片的链接列表
  })
}
/**
 * 本地图片上传
 */
 function uploadOneImage() {
  return new Promise(function (resolve, reject) {
    wx.chooseImage({
      count: 1,
      sizeType: ['original', 'compressed'],
      sourceType: ['album'],
      success(res) {
        const tempFilePaths = res.tempFilePaths[0];
        // resolve(tempFilePaths)//可直接返回临时链接,也可直接返回res
        resolve(res)
      },
      fail(res) {
      }
    })
  })
}

 /**
 * 相机拍摄
 */
 function uploadByCamera() {
  return new Promise(function (resolve, reject) {
    wx.chooseImage({
      count: 1,
      sizeType: ['original'], // 可以指定是原图还是压缩图,默认二者都有
      sourceType: ['camera'], // 可以指定来源是相册还是相机,默认二者都有'album', 'camera'
      success(res) {
        const tempFilePaths = res.tempFilePaths[0];
        resolve(res)
      },
      fail(res) {
      }
    })
  })
}

/**
 * 视频拍摄
 * @param maxDuration时长
 * @param from 上传方式:相册 album  相机拍摄 camera
 */
 function chooseVideo(maxDuration, from) {
  //album 相册选择 camera 相机拍摄
  return new Promise(function (resolve, reject) {
    wx.chooseVideo({
      sourceType: [from],
      maxDuration: maxDuration,
      camera: 'back',
      success(res) {
        const tempFilePath = res.tempFilePath;
        const time = res.duration;
        const size = res.size;//返回时间为字节B,转换1M=1024KB  1Kb=1024B
        resolve(res)
      },
      fail(err) {
        reject(err)
      }
    })
  })
}
/**
 * 预览pdf
 * @param {*} post_res 接口返回数据
 * @param {*} dirPath 写入本地路径中的微信缓存key值
 * @param {*} fileType 文件类型,指定文件类型打开文件
 */
function toPreviewPDF(post_res, dirPath, fileType) {
  return new Promise(function (resolve, reject) {
    const FileSystemManager = wx.getFileSystemManager();
    const filePath = wx.env.USER_DATA_PATH + "/" + Date.now();
    removeSave(dirPath).then(remove_res => {
      FileSystemManager.writeFile({
        filePath: filePath,
        data: post_res,
        encoding: "binary",//必填
        success(res) {
          wx.openDocument({ // 打开文档
            filePath: filePath,  //拿上面存入的文件路径
            showMenu: true, // 显示右上角菜单
            fileType: fileType,
            success: function (res) {
              console.log('打开' + fileType + '成功')
              wx.setStorageSync(dirPath, filePath);
              resolve(filePath)
            },
            fail:function(err){
              reject(err)
            }
          })
        }
      })
    })
  })
}
/**
 * 清除临时本地文件,防止多次保存报错
 * @param {*} dirPath 小程序缓存key值
 */
function removeSave(dirPath) {
  return new Promise(function (resolve, reject) {
    // 把文件删除后再写进,防止超过最大范围而无法写入
    const fsm = wx.getFileSystemManager();  //文件管理器
    fsm.readdir({  // 获取文件列表
      dirPath: wx.env.USER_DATA_PATH,// 当时写入的文件夹
      success(res) {
        let dir = wx.getStorageSync(dirPath);
        if (!dir) {

        } else {
          fsm.unlink({
            filePath: dir,
            success(res) {
              console.log('readdir文件删除成功:', res)
            },
            fail(e) {
              console.log('readdir文件删除失败:', e)
            }
          })
        }
        resolve(dirPath)
      }
    })
  })
}
### 微信小程序实现图片与文档预览功能 #### 小程序中图片预览的功能实现 在微信小程序中,可以通过 `wx.previewImage` 方法来实现图片预览功能。该方法支持多张图片的轮播查看,并允许用户保存或分享当前正在查看的图片。 以下是使用 `wx.previewImage` 的示例代码: ```javascript // 示例代码:图片预览功能 Page({ data: { imageList: [ 'https://example.com/image1.jpg', 'https://example.com/image2.jpg', 'https://example.com/image3.jpg' ] }, previewImage(e) { const current = e.currentTarget.dataset.src; wx.previewImage({ current, // 当前显示图片的http链接 urls: this.data.imageList // 需要预览图片http链接列表 }); } }); ``` 上述代码通过绑定点击事件调用 `previewImage` 函数[^1],从而触发图片预览操作。 --- #### 小程序中文档预览的功能实现 对于文档类型的文件(如 PDF、Word、Excel 等),微信小程序本身并不直接提供内置组件用于预览这些文件。通常的做法是先将文件下载到本地,再利用第三方服务或者微信开放接口完成预览。 ##### 使用官方 API 下载并打开文档 可以借助 `wx.downloadFile` 和 `wx.openDocument` 完成文档的下载与预览。需要注意的是,在实际开发过程中可能会遇到一些兼容性问题,比如某些线上环境无法正常运行等问题。 下面是一个简单的例子展示如何处理这种情况: ```javascript // 示例代码:文档预览功能 Page({ downloadAndOpenDocument() { const filePath = wx.getFileSystemManager().tempFilePath; // 获取临时路径 wx.downloadFile({ url: 'https://example.com/document.pdf', // 替换为目标文件地址 success(res) { if (res.statusCode === 200) { wx.openDocument({ filePath: res.tempFilePath, fileType: 'pdf', // 文件类型需匹配实际情况 success() { console.log('成功打开文档'); }, fail(err) { console.error('失败原因:', err); } }); } else { console.error('下载失败:', res.errMsg); } } }); } }); ``` 此段代码展示了如何从服务器获取指定 URL 地址上的资源,并将其作为可读取的内容呈现给用户。 --- #### 解决常见问题 当尝试在线上环境中部署时发现部分功能失效的情况,可能是因为测试环境下使用的模拟器版本较新而正式发布版存在差异所致。因此建议开发者仔细阅读官方文档说明以及更新日志信息,确保所依赖的方法均已被完全支持。 另外关于 **iOS 设备 window.open 不生效** 这类跨平台适配难题,则需要针对不同操作系统特性分别编写逻辑分支加以解决。 --- ### 注意事项 - 对于大尺寸图像加载时间较长的问题,考虑压缩原图后再上传至云端存储; - 如果涉及敏感数据传输,请务必启用 HTTPS 协议保障信息安全; - 提供多种格式转换选项以便满足更多场景需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值