HarmonyOS 如何上传文件?

使用http库上传文件时已经请求了文件权限

let permissions: Array<Permissions> = [
  'ohos.permission.READ_MEDIA',
  'ohos.permission.WRITE_MEDIA',
  'ohos.permission.FILE_ACCESS_MANAGER',
]
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

请求的参数如下:

{
  "method": "POST",
  "header": {
    "content-Type": "multipart/form-data",
    "Authorization": "Bearer 67984142-0c84-4432-991f-9dbd09a3aadd"
  },
  "expectDataType": 1,
  "multiFormDataList": [
    {
      "name": "multipartFile",
      "contentType": "image/png",
      "filePath": "file://media/Photo/19/IMG_1718203942_015/IMG_20240612_225042.jpg",
      "remoteFileName": "IMG_20240612_225042.jpg",
      "data": ""
    }
  ]
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
HarmonyOS
2024-12-19 16:37:18
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
Heiang

文件上传可参考此文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-request-V5#ZH-CN_TOPIC_0000001884918246__requestuploaddeprecated

通过PhotoViewPicker获取到的图片不能直接用于传输,可以通过将其复制在应用沙箱路径下,然后再用沙箱路径下的文件进行传输。下面是部分demo:

import { BusinessError } from '@ohos.base';
import { rcp } from '@kit.RemoteCommunicationKit';
import { picker } from '@kit.CoreFileKit';
import fs from '@ohos.file.fs';
import { http } from '@kit.NetworkKit';

let uploadUrl: string = 'http://192.168.62.4:8080/upload';

function example01(): string {
  let uri = '';
  let photoViewPicker = new picker.PhotoViewPicker();
  let photoSelectOption = new picker.PhotoSelectOptions();
  photoSelectOption.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
  photoViewPicker.select(photoSelectOption).then((photoSelectResult) => {
    console.log("tag photoSelectResult:" + photoSelectResult);
    uri = photoSelectResult.photoUris[0];
    console.log("tag uri:" + uri);
    try {
      let resultPhoto = fs.openSync(uri, fs.OpenMode.READ_ONLY);
      let resultName = resultPhoto.name;
      let fileTemp = fs.openSync(getContext().filesDir + resultPhoto.name, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
      let imageUri = fileTemp.path;
      fs.copyFileSync(resultPhoto.fd, fileTemp.fd);
      fs.closeSync(resultPhoto);
      fs.closeSync(fileTemp);
      const httpRequest = http.createHttp();
      httpRequest.request(uploadUrl, {
        method: http.RequestMethod.POST,
        header: {
          'Content-Type': 'multipart/form-data',
          'Connection': 'keep-alive'
        },
        expectDataType: http.HttpDataType.ARRAY_BUFFER,
        multiFormDataList: [
          {
            name: 'file',
            contentType: 'image/jpg',
            filePath: imageUri,
            remoteFileName: 'file.jpg'
          },
        ],
      }, (err, data) => {
        console.log('tag:上传结束')
        httpRequest.destroy();
      }
      )
    } catch (err) {
      console.error(`tag:Failed to request the upload. err: ${JSON.stringify(err)}`);
    }

  }).catch((err: BusinessError) => {
    console.error(`Invoke photoViewPicker.select failed, code is ${err.code}, message is ${err.message}`);
  })
  return uri;
}

function testRcpMultiPartUpload() {
  example01();
}

function clickget() {
  const session = rcp.createSession();
  session.get("http://192.168.62.4:8080/getText").then((response) => {
    console.log("tag" + JSON.stringify(response));
  }).catch((err: BusinessError) => {
    console.error("err:" + JSON.stringify(err));
  });
}

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            testRcpMultiPartUpload();
          })
        Text('getText')
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => {
            clickget();
          })

      }
      .width('100%')
    }
    .height('100%')
  }
}
  • 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.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
分享
微博
QQ
微信
回复
2024-12-19 19:27:22
相关问题
HarmonyOS 如何通过SFTP上传文件
603浏览 • 1回复 待解决
HarmonyOS 文件上传HEADER如何配置
630浏览 • 1回复 待解决
HarmonyOS上传文件问题
1228浏览 • 1回复 待解决
HarmonyOS 录音上传文件
889浏览 • 1回复 待解决
HarmonyOS 上传文件问题
764浏览 • 1回复 待解决
HarmonyOS 文件上传无法解析文件地址
887浏览 • 1回复 待解决
HarmonyOS 图片上传文件过大如何处理
794浏览 • 1回复 待解决
HarmonyOS axios上传文件失败
841浏览 • 1回复 待解决
HarmonyOS web组件上传文件
951浏览 • 1回复 待解决
HarmonyOS 文件上传报错
1058浏览 • 1回复 待解决
HarmonyOS 上传文件相关Demo
1363浏览 • 1回复 待解决
HarmonyOS文件上传怎么写
1401浏览 • 1回复 待解决
HarmonyOS 上传文件的demo
855浏览 • 1回复 待解决
NEXT网络请求如何上传文件
3071浏览 • 1回复 待解决
文件上传的本地路径如何获取
1045浏览 • 1回复 待解决
HarmonyOS日志文件上传问题
1385浏览 • 1回复 待解决
HarmonyOS @ohos/httpclient上传文件问题
867浏览 • 1回复 待解决
HarmonyOS 文件上传 & 资源读取问题
1551浏览 • 1回复 待解决
HarmonyOS request文件上传问题
784浏览 • 1回复 待解决
HarmonyOS web上传文件和图片
892浏览 • 1回复 待解决
HarmonyOS 文件上传入参设置
525浏览 • 1回复 待解决
HarmonyOS 文件管理查找pdf文件上传
908浏览 • 1回复 待解决