积分186 / 贡献0

提问5答案被采纳14文章0

作者动态

使用axios上传文件闪退

今天也很开心 显示全部楼层 发表于 2023-9-14 19:43:45

使用picker选中图库的文件,将选中的文件使用axios上传到后台,上传过程闪退了,系统日志在下面。

经过我的分析picker可以正常的获取路径,就是上传导致的问题,

file://media/image/16

代码:

upload() {
    const photoSelectOptions = new picker.PhotoSelectOptions;
    photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE
    photoSelectOptions.maxSelectNumber = 5

    const photoPicker = new picker.PhotoViewPicker()
    photoPicker.select(photoSelectOptions).then(async (photoSelectResult) => {
      let uri = photoSelectResult.photoUris[0]
      setTimeout(() => {
        // 复制文件到缓存目录下
        let file = fs.openSync(uri, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE);
        fs.copyFileSync(file.fd, globalThis.cacheDir + '/photo.jpg')
        fs.closeSync(file)
        console.info(tag, uri)
        let path = 'internal://cache/photo.jpg'
        // 从filePick中获取
        let formData = new FormData()
        formData.append('file', path, 'picker.jpg');
        formData.append('info', {key: 'ERWIOUYREUWI', name: 'vid'});
        formData.append('fileId', 2009);
        //  使用axios发送请求
        axios.post('http://139.9.199.99:3000/tpc/upload', formData, {
          headers: { 'Content-Type': 'multipart/form-data' },
          context: globalThis.abilityContext,
        }).then(res => {
          console.info(tag, 'upload success: ' + JSON.stringify(JSON.stringify(res.data)))
        }).catch(err => {
          console.info(tag, 'upload error: ' + JSON.stringify(JSON.stringify(err)))
        })
      }, 100)
    }).catch(err => {
      console.info(tag, `failed to photoPicker select. Code :${err.code} , message: ${err.message}`)
    })
  }

【运行环境】

硬件:rk3568; ROM: 3.2 ; API 10

【系统日志】 image53.png

image (33).png
您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论1

mean

沙发 发表于 2023-10-8 16:46:11

使用axios上传必须添加onUploadProgress回调,而且formData中传输的数据必须是string类型,按照我的代码修改。

let formData = new FormData()

        formData.append('file', path, 'picker.jpg');

        formData.append('fileId', '2009');

        //  使用axios发送请求

        axios.post('http://139.9.199.99:3000/tpc/upload', formData, {

          headers: { 'Content-Type': 'multipart/form-data' },

          context: globalThis.abilityContext,

          onUploadProgress: (progressEvent: any): void => {

            console.info(JSON.stringify(progressEvent))

            console.info(tag, ' progress ' + Math.ceil(progressEvent.loaded / progressEvent.total \* 100))

          }

        }).then(res => {

          console.info(tag, 'upload success: ' + JSON.stringify(JSON.stringify(res.data)))

        }).catch(err => {

          console.info(tag, 'upload error: ' + JSON.stringify(JSON.stringify(err)))

        })

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部