HarmonyOS 如何上传文件?

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

let permissions: Array<Permissions> = [
  'ohos.permission.READ_MEDIA',
  'ohos.permission.WRITE_MEDIA',
  'ohos.permission.FILE_ACCESS_MANAGER',
]

请求的参数如下:

{
  "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": ""
    }
  ]
}
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%')
  }
}
分享
微博
QQ
微信
回复
2024-12-19 19:27:22
相关问题
HarmonyOS 文件上传HEADER如何配置
223浏览 • 1回复 待解决
HarmonyOS 如何通过SFTP上传文件
287浏览 • 1回复 待解决
HarmonyOS 上传文件问题
428浏览 • 1回复 待解决
HarmonyOS 录音上传文件
508浏览 • 1回复 待解决
HarmonyOS上传文件问题
918浏览 • 1回复 待解决
HarmonyOS 文件上传无法解析文件地址
435浏览 • 1回复 待解决
HarmonyOS 上传文件的demo
476浏览 • 1回复 待解决
HarmonyOS文件上传怎么写
1053浏览 • 1回复 待解决
HarmonyOS 图片上传文件过大如何处理
413浏览 • 1回复 待解决
HarmonyOS 上传文件相关Demo
998浏览 • 1回复 待解决
HarmonyOS web组件上传文件
616浏览 • 1回复 待解决
HarmonyOS axios上传文件失败
452浏览 • 1回复 待解决
HarmonyOS 文件上传报错
602浏览 • 1回复 待解决
文件上传的本地路径如何获取
797浏览 • 1回复 待解决
NEXT网络请求如何上传文件
2682浏览 • 1回复 待解决
HarmonyOS 文件上传 & 资源读取问题
1152浏览 • 1回复 待解决
HarmonyOS web上传文件和图片
550浏览 • 1回复 待解决
HarmonyOS 文件上传入参设置
222浏览 • 1回复 待解决
HarmonyOS request文件上传问题
232浏览 • 1回复 待解决
HarmonyOS日志文件上传问题
1040浏览 • 1回复 待解决
HarmonyOS @ohos/httpclient上传文件问题
355浏览 • 1回复 待解决
HarmonyOS 文件管理查找pdf文件上传
436浏览 • 1回复 待解决