HarmonyOS 文件上传 & 资源读取问题?

let uploadTask: request.UploadTask;
let uploadConfig: request.UploadConfig = {
  url: 'http://www.huawei.com', //需要手动替换为真实服务器地址
  header: { 'Accept': '*/*' },
  method: "POST",
  files: [{ filename: "test", name: "test", uri: "internal://cache/test.jpg", type: "jpg" }],
  data: [{ name: "name123", value: "123" }],
};
try {
  request.uploadFile(getContext(), uploadConfig).then((data: request.UploadTask) => {
    uploadTask = data;
  }).catch((err: BusinessError) => {
    console.error(`Failed to request the upload. Code: ${err.code}, message: ${err.message}`);
  });
} catch (err) {
  console.error(`Failed to request the upload. err: ${JSON.stringify(err)}`);
}

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-request-V5

files中的uri可以读取工程内的资源文件吗,例如resources下的资源($r(‘app.media.ic\_app\_logo’)),这样怎么读取并上传?

阅读 566
1 个回答

request当前仅支持上传应用沙箱路径的文件,需要上传项目资源文件,请先拷贝到沙箱路径,以下是一个拷贝rawfile下资源文件的参考:

getContext(this).resourceManager.getRawFileContent('test.txt', (_err, value) => {
  let myBuffer:ArrayBufferLike = value.buffer
  let context = getContext(this);
  //沙箱路径
  let filePath = context.filesDir + "/test.txt";
  console.log("testTag-filePath:" + filePath);
  let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
  let writeLen = fs.writeSync(file.fd, myBuffer);
  console.info("testTag-write data to file succeed and size is:" + writeLen);
  fs.closeSync(file);
});