HarmonyOS 文件上传下载api问题

文件上传的实例代码中:

let uploadTask: request.UploadTask;
let uploadConfig: request.UploadConfig = {
  url: 'http://www.huawei.com', // 需要手动将 url 替换为真实服务器的 HTTP 协议地址
  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)}`);
}

里面的这个uri应该传什么?这个internal://是怎么来的?我沙箱路径的文件“/data/storage/el2/base/cache/1234569.mp3”怎么才能弄成这个所谓的internal://开头的uri?

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
aquaa

internal://cache路径是:/data/app/el2/100/base/包名/haps/entry/cache/

请参考以下文档:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/app-file-upload-download-V5https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-file-fileuri-V5https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-request-V5

以上传图库中图片为例:

import { fileIo as fs, picker } from '@kit.CoreFileKit';
import { copyFileToApp, uploadFileDemo } from '../common/Utils';

@Entry
@Component
struct Index {
  @State uri: string = "";

  build() {
    Column() {
      Button('获取 picker 文件')
        .onClick(() => {
          let options = new picker.PhotoSelectOptions();
          let p = new picker.PhotoViewPicker();
          p.select(options).then((res: picker.PhotoSelectResult) => {
            this.uri = res.photoUris[0];
          });
        })

      Button("上传文件")
        .onClick(() => {
          // 沙箱文件地址
          let fileArray = this.uri.split("/");
          let fileName = fileArray[fileArray.length - 1]
          let p = getContext(this).cacheDir + "/" + fileName;
          // 从公共目录拷贝到沙箱
          try {
            let file = fs.openSync(this.uri, fs.OpenMode.READ_ONLY);
            let dstPath = getContext(this).cacheDir + '/' + fileName;
            let file2 = fs.openSync(dstPath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE); //先创建有读写权限的文件,再把不可读写的文件复制过来
            fs.copyFileSync(file.fd, file2.fd);
          } catch (e) {
            console.error("tag copy error")
          }
          // 上传
          uploadFileDemo(getContext(this), fileName);
        })
    }
  }
}
//上传
// 从沙箱目录上传文件
export function uploadFileDemo(ctx: Context, fileName: string) {
  // 上传任务配置项
  let files: Array<request.File> = [
    { filename: fileName, name: 'test', uri: 'internal://cache/' + fileName, type: 'txt' }
  ]

  let data: Array<request.RequestData> = [{ name: 'name', value: "tag"}];
  let uploadConfig: request.UploadConfig = {
    url: 'https://agc-storage-drcn.platform.dbankcloud.cn/v0/test-rqcjj/' + fileName,
    header: {'User-Agent': 'PostmanRuntime'},
    method: 'PUT',
    files: files,
    data: data
  }

  // 上传响应体
  let headerCallback = (header: object) => {
    console.info('headers ' + JSON.stringify(header))

  }
  // 将本地应用文件上传至网络服务器
  try {
    request.uploadFile(ctx, uploadConfig)
      .then((uploadTask: request.UploadTask) => {
        uploadTask.on("headerReceive", headerCallback);
        uploadTask.on('complete', (taskStates: Array<request.TaskState>) => {
          for (let i = 0; i < taskStates.length; i++) {
            console.info(`upload complete taskState: ${JSON.stringify(taskStates[i])}`);
          }
        });
      })
      .catch((err: BusinessError) => {
        console.error(`Invoke uploadFile failed, code is ${err.code}, message is ${err.message}`);
      })
  } catch (error) {
    let err: BusinessError = error as BusinessError;
    console.error(`Invoke uploadFile failed, code is ${err.code}, message is ${err.message}`);
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 上传下载如何获取请求响应
435浏览 • 1回复 待解决
HarmonyOS 上传文件问题
106浏览 • 1回复 待解决
HarmonyOS上传文件问题
617浏览 • 1回复 待解决
HarmonyOS 文件下载问题
78浏览 • 1回复 待解决
HarmonyOS 文件上传 & 资源读取问题
607浏览 • 1回复 待解决
HarmonyOS 文件下载保存问题
151浏览 • 1回复 待解决
HarmonyOS日志文件上传问题
603浏览 • 1回复 待解决
HarmonyOS 文件上传服务器问题
403浏览 • 1回复 待解决
HarmonyOS 文件下载的几个问题
50浏览 • 1回复 待解决
js开发上传文件路径问题
6305浏览 • 2回复 待解决
HarmonyOS 下载到本地文件的预览问题
29浏览 • 1回复 待解决
HarmonyOS 录音上传文件
126浏览 • 1回复 待解决
HarmonyOS 如何上传文件
167浏览 • 1回复 待解决
HarmonyOS 文件下载,预览
37浏览 • 1回复 待解决
HarmonyOS 文件上传无法解析文件地址
109浏览 • 1回复 待解决
软件下载问题 软件下载问题!?!
5726浏览 • 1回复 待解决
HarmonyOS文件上传怎么写
588浏览 • 1回复 待解决