HarmonyOS 官网的request.uploadFile无法同时上传多张图片问题?

目前有个比较严重点的问题,就是你们官网的request.uploadFile上传图片,看似是可以传多张,其实是一张一张传的,但接口是一次性接收多张的, 用request.uploadFile上传,传了两张,但只有第一张能成功,等传第二张的时候接口就报图片已上传 ,传不上去了,现需要一个真实的一次上传多张图片的方案。

阅读 473
1 个回答

建议使用axios的多文件上传,示例代码如下:

import { LengthMetrics } from '@kit.ArkUI'
import { hilog } from '@kit.PerformanceAnalysisKit';
import axios, { AxiosResponse, FormData } from '@ohos/axios';
import fs from '@ohos.file.fs';

const TAG = `struct1`
const DOMAIN = 0x0001

@Component
export struct MultiFileUpload {
  aboutToAppear(): void {
    hilog.info(DOMAIN, TAG, 'aboutToAppear');
  }

  aboutToDisappear(): void {
    hilog.info(DOMAIN, TAG, 'aboutToDisappear');
  }

  onBackPress(): boolean | void {
    hilog.info(DOMAIN, TAG, 'onBackPress');
  }

  onPageShow(): void {
    hilog.info(DOMAIN, TAG, 'onPageShow');
  }

  onPageHide(): void {
    hilog.info(DOMAIN, TAG, 'onPageHide');
  }

  onDidBuild(): void {
    hilog.info(DOMAIN, TAG, 'onDidBuild');
  }

  build() {
    Flex({ wrap: FlexWrap.Wrap, space: { main: LengthMetrics.vp(5), cross: LengthMetrics.vp(5) } }) {
      Button("MultiFIileUpload").onClick(() => {
        hilog.info(DOMAIN, TAG, 'MultiFIleUpload');
        // ArrayBuffer
        let formData = new FormData()
        let cacheDir = getContext(this).cacheDir
        try {
          // 写入
          let path = cacheDir + '/hello.txt';
          let file = fs.openSync(path, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE)
          fs.writeSync(file.fd, "hello, world"); // 以同步方法将数据写入文件
          fs.fsyncSync(file.fd); // 以同步方法同步文件数据。
          fs.closeSync(file.fd);
          // 读取
          let file2 = fs.openSync(path, 0o2);
          let stat = fs.lstatSync(path);
          let buf2 = new ArrayBuffer(stat.size);
          fs.readSync(file2.fd, buf2); // 以同步方法从流文件读取数据。
          fs.fsyncSync(file2.fd);
          fs.closeSync(file2.fd);
          formData.append('file', buf2);
          let file3 = fs.openSync(path, 0o2);
          let stat3 = fs.lstatSync(path);
          let buf3 = new ArrayBuffer(stat3.size);
          fs.readSync(file3.fd, buf3); // 以同步方法从流文件读取数据。
          fs.fsyncSync(file3.fd);
          fs.closeSync(file3.fd);
          formData.append('file', buf3);
        } catch (err) {
          console.info('err:' + JSON.stringify(err));
        }
        axios.post("http://localhost:3000/upload",formData,{
          headers: { 'Content-Type': 'multipart/form-data' },
          context: getContext(this),
        }).then((res: AxiosResponse) => {
          console.info("result" + JSON.stringify(res.data));
        })
      })
    }
  }
}

axios HarmonyOS版仓库地址:https://gitee.com/openharmony-sig/ohos\_axios

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进