HarmonyOS 文件上传RemoteCommunicationKit+FROM表单+POST

使用RemoteCommunicationKit实现,FROM表单+POST上传文件报错:

{"code":1007900026,"data":"Failed to open/read local data from file/application"}
  • 1.

操作步骤:

1、上传头像,打开系统相机或相册选择图片。

2、上传到服务器。

代码逻辑步骤:

1、定义权限,module.json5中添加权限声明:

//允许应用获取网络权限
{
  "name": "ohos.permission.INTERNET",
  "usedScene": {
    "abilities": [
      "FormAbility"
    ],
    "when": "inuse"
  }
},
//允许应用使用相机权限
{
  "name": "ohos.permission.CAMERA",
  "reason": "$string:permission_camera_reason",
  "usedScene": {
    "abilities": [
      "EntryAbility"
    ]
  }
},
// 用于应用读取用户外部储存中的媒体文件信息
{
  "name": "ohos.permission.READ_MEDIA",
  "reason": "$string:permission_readMedia_reason",
  "usedScene": {
    "abilities": [
      "EntryAbility"
    ]
  }
},
// 用于应用写入用户外部储存中的媒体文件信息
{
  "name": "ohos.permission.WRITE_MEDIA",
  "reason": "$string:permission_writeMedia_reason",
  "usedScene": {
    "abilities": [
      "EntryAbility"
    ]
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.

2、从相册选择文件并得到文件路径:file://media/Photo/8/IMG_1720688648_002/tz.jpg(验证地址是否准确,使用Image加载该路径,可正常展示)。

3、发送请求上传文件。

HarmonyOS
2024-12-23 16:25:25
854浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
superinsect

相册路径不能直接用于传输,可以通过将相册图片复制到应用沙箱路径下,然后再用沙箱路径下的文件进行传输。从相册复制文件到沙箱目录,可参考如下代码:

function SavePhotoToFileDir() {
  try {
    let photoSelectOptions = new picker.PhotoSelectOptions();
    photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
    photoSelectOptions.maxSelectNumber = 1;
    let photoPicker = new picker.PhotoViewPicker();
    let uris: Array<string> = [];
    photoPicker.select(photoSelectOptions).then((photoSelectResult: picker.PhotoSelectResult) => {
      uris = photoSelectResult.photoUris;
      let fileArray = uris[0].split("/");
      let fileName = fileArray[fileArray.length - 1];
      let file = fs.openSync(uris[0], fs.OpenMode.READ_ONLY);
      let cacheDir = mContext.filesDir;
      let dstPath = cacheDir + '/' + fileName;
      let file2 = fs.openSync(dstPath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
      fs.copyFileSync(file.fd, file2.fd);
      fs.closeSync(file);
      console.info('PhotoViewPicker.select successfully, photoSelectResult uri: ' + JSON.stringify(photoSelectResult));
    }).catch((err: BusinessError) => {
      console.error('PhotoViewPicker.select failed with err: ' + JSON.stringify(err));
    });
  } catch (error) {
    let err: BusinessError = error as BusinessError;
    console.error('PhotoViewPicker failed with err: ' + JSON.stringify(err));
  }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
分享
微博
QQ
微信
回复
2024-12-23 20:56:55


相关问题
HarmonyOS RCP POST表单提交咨询
725浏览 • 1回复 待解决
HarmonyOS Rcp.post上传图库文件至服务器
1530浏览 • 1回复 待解决
HarmonyOS上传文件问题
1228浏览 • 1回复 待解决
HarmonyOS 如何上传文件
933浏览 • 1回复 待解决
HarmonyOS 上传文件问题
762浏览 • 1回复 待解决
HarmonyOS 录音上传文件
889浏览 • 1回复 待解决
HarmonyOS 文件上传无法解析文件地址
887浏览 • 1回复 待解决
HarmonyOS 文件上传报错
1051浏览 • 1回复 待解决
HarmonyOS axios上传文件失败
841浏览 • 1回复 待解决
HarmonyOS web组件上传文件
951浏览 • 1回复 待解决
HarmonyOS 上传文件相关Demo
1354浏览 • 1回复 待解决
HarmonyOS 上传文件的demo
850浏览 • 1回复 待解决
HarmonyOS文件上传怎么写
1400浏览 • 1回复 待解决
HarmonyOS 如何通过SFTP上传文件
598浏览 • 1回复 待解决
HarmonyOS日志文件上传问题
1380浏览 • 1回复 待解决