收藏
回答

用miniprogram-file-uploader上传需要分片的文件卡在start upload?

使用miniprogram-file-uploader上传需要分片的文件卡在 start upload chunks,上传一个不需要分片的文件倒是可以上传成功。

这种情况只在真机调试的时候出现,在模拟器上上传完全没问题。

文件代码基本拷贝miniprogram-file-uploader代码仓库中的例子。

这是真机调试的控制台信息截图

最开始的部分是使用这个控件进行图片上传,成功了,第二个部分是使用wx.upload上传一个9M多的视频也成功了,最后一个部分是使用这个控件进行视频上传,卡在这里不动了,并且右侧连接信息下面出现连接错误。

上传页面js代码

// pages/upload/upload.js
// 文件上传 参考 https://github.com/wechat-miniprogram/miniprogram-file-uploader/tree/0c69766a4c5c4a2a6194c4f80479aabe39121c5e
import Uploader from '../../miniprogram_npm/miniprogram-file-uploader/index'
const app = getApp()
const MB = 1024 * 1024
const HOST_IP = '192.168.31.27'
const MERGE_URL = `http://${HOST_IP}:5001/Plugin/WeAppApi/upload/merge`
const VERIFY_URL = `http://${HOST_IP}:5001/Plugin/WeAppApi/upload/verify`
const UPLOAD_URL = `http://${HOST_IP}:5001/Plugin/WeAppApi/upload/upload`
Page({


  /**
   * 页面的初始数据
   */
  data: {
    progress: 0,
    uploadedSize: 0,
    averageSpeed: 0,
    timeRemaining: Number.POSITIVE_INFINITY,
    testChunks: false,
    url: `http://${HOST_IP}:5001/upload/211206161410.mp4`
  },


  /**
   * 生命周期函数--监听页面加载
   */
  onLoad() {
    this.chunkSize = 5 * MB
  },


  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {


  },


  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {


  },


  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {


  },


  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {


  },


  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {


  },


  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {


  },


  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {


  },
  onTestChunksChange(e) {
    const value = e.detail.value
    this.data.testChunks = value
  },
  
  async chooseVideo() {
    this.reset()
    const {
      tempFilePath,
      size,
    } = await wx.chooseVideo({
      sourceType: ['album','camera'],
      compressed: false
    })
    console.log(tempFilePath)
    if (!Uploader.isSupport()) {
      wx.showToast({
        title: '分片上传在 2.10.0 版本以上支持',
        icon: 'none',
        duration: 3000
      })
      return
    }
    const uploader = new Uploader({
      tempFilePath,
      totalSize: size,
      fileName: tempFilePath,
      verifyUrl: VERIFY_URL,
      uploadUrl: UPLOAD_URL,
      mergeUrl: MERGE_URL,
      testChunks: this.data.testChunks,
      verbose: true
    })
    uploader.on('retry', (res) => {
      console.log('retry', res.url)
    })
    uploader.on('complete', (res) => {
      console.log('upload complete', res)
    })
    uploader.on('success', (res) => {
      console.log('upload success', res)
      this.setData({
        url: `http://${HOST_IP}:5001/${res.url}`
      })
    })
    uploader.on('fail', (res) => {
      console.log('upload fail', res)
    })
    uploader.on('progress', (res) => {
      this.setData({
        progress: res.progress,
        uploadedSize: parseInt(res.uploadedSize / 1024),
        averageSpeed: parseInt(res.averageSpeed / 1024),
        timeRemaining: res.timeRemaining
      })
    })
    uploader.upload()
    this.uploader = uploader
  },
  reset() {
    this.setData({
      progress: 0,
      uploadedSize: 0,
      averageSpeed: 0,
      timeRemaining: Number.POSITIVE_INFINITY,
    })
  },
  handleUpload() {
    this.uploader && this.uploader.upload()
  },
  handlePause() {
    this.uploader && this.uploader.pause()
  },
  handleResume() {
    this.uploader && this.uploader.resume()
  },
  handleCancel() {
    this.uploader && this.uploader.cancel()
  }
})
最后一次编辑于  2021-12-13
回答关注问题邀请回答
收藏

6 个回答

  • 社区技术运营专员--阳光
    社区技术运营专员--阳光
    2021-12-15

    建议安装一下 whistle 代理抓包工具,配置开发者工具使用代理,通过代理工具查看网络请求的情况

    2021-12-15
    有用
    回复 1
    • ㅤ
      2022-09-27
      打开调试就能使用 是什么原因 线上会有问题吗。合法域名已经配置
      2022-09-27
      回复
  • 上帝的骰子
    上帝的骰子
    2022-03-16

    解决了吗?大哥 我也是这个情况

    2022-03-16
    有用 1
    回复 2
    • 上帝的骰子
      上帝的骰子
      2022-03-16
      解决了,真机上要打开“调试模式”
      2022-03-16
      回复
    • ㅤ
      2022-09-27回复上帝的骰子
      用户没有调试模式 怎么搞
      2022-09-27
      回复
  • 小猪佩奇
    小猪佩奇
    2021-12-17

    miniprogram-file-uploader 小程序多个大文件上传示例

    服务端采用的nginx+php

    链接:https://pan.baidu.com/s/1mJpWdbETfzYlnpaRKlH1jw 提取码:iq8r


    2021-12-17
    有用 1
    回复
  • ㅤ
    2022-09-27

    老哥你解决了吗

    2022-09-27
    有用
    回复
  • 小新
    小新
    2022-01-25

    解决了吗?大哥 我也是这个情况

    2022-01-25
    有用
    回复
  • 青团社
    青团社
    2021-12-14

    配置了uploadFile域名的吧

    2021-12-14
    有用
    回复 8
    • 陌上黄昏
      陌上黄昏
      2021-12-14
      我在项目设置里选了不校验合法域名。而且相同的地址图片上传成功了。这个会和域名配置有关么?我这里用的上传地址都是局域网ip
      2021-12-14
      回复
    • 小猪佩奇
      小猪佩奇
      2021-12-15回复陌上黄昏
      你的后端是怎么接收上传的,还有nginx需不需要做什么配置
      2021-12-15
      回复
    • 小猪佩奇
      小猪佩奇
      2021-12-15
      2021-12-15
      回复
    • 小猪佩奇
      小猪佩奇
      2021-12-15
      我后端收到不数据流
      2021-12-15
      回复
    • 陌上黄昏
      陌上黄昏
      2021-12-15回复小猪佩奇
      我用.net core 写的后端,如果我们用的不是一样的后端的话我的写法你也没法参考吧……
      2021-12-15
      回复
    查看更多(3)
登录 后发表内容