HarmonyOS 后台服务接不到文件

uploadPics(){
  let fileUris = this.copyFileToSandBox();

  let files: Array<request.File> = []
  for (let i = 0; i < fileUris.length; i++) {
    let file = fs.openSync(fileUris[i],fs.OpenMode.READ_ONLY);
    let stat = fs.lstatSync(fileUris[i]);
    fs.closeSync(file.fd);
    let filename = fileUris[i].substring(fileUris[i].lastIndexOf("/") + 1);
    let name = filename.substring(0,filename.indexOf("."));
    let fileType = filename.substring(filename.indexOf(".") + 1);
    let path = fileUris[i].substring(fileUris[i].lastIndexOf("/cache"))
    files.push({
      filename: name,
      name: "files",
      uri: "internal:/" + path,
      type: fileType
    })
  };
  let header = new Map<Object, string>();
  header.set("Content-type","multipart/form-data")
  let data : Array<request.RequestData> = [{name:"serviceCode",value:"handheld_bus_file"},{name:"twoServiceCode",value:"feedback"}];
  let uploadConfig: request.UploadConfig = {
    url: UrlConst.ROOT_URL + UrlConst.FILE_UPLOAD_URL,
    header: header,
    method: 'POST',
    files: files,
    data: data
  }
  try {
    request.uploadFile(getContext(this), uploadConfig)
      .then((uploadTask: request.UploadTask) => {
        uploadTask.on('complete', (taskStates: Array<request.TaskState>) => {
          for (let i = 0; i < taskStates.length; i++) {
            console.info(`upload complete taskState: ${JSON.stringify(taskStates[i])}`);
          }
        });
        uploadTask.on("headerReceive",(header:object)=>{
          console.log(JSON.stringify(header));
          //header.body为服务器返回的信息
        })
        /*uploadTask.delete(()=>{})
        uploadTask.off('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}`);
  }

}
  • 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.

使用上述代码上传文件时,在

uploadTask.on("headerReceive",(header:object)=>{
  console.log(JSON.stringify(header));
  //header.body为服务器返回的信息
})
  • 1.
  • 2.
  • 3.
  • 4.

中接到文件不能为空,跟进后台后发现,无文件上传到服务器,该接口在友商平台调用正常,缓存中的文件有数据,未能分析出代码问题

HarmonyOS
2024-12-24 15:43:06
788浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
zbw_apple

参考示例:

uploadPics(){
  let fileUris = this.copyFileToSandBox();
  this.caches = fileUris;
  let files: Array<request.File> = []
  for (let i = 0; i < fileUris.length; i++) {
    let file = fs.openSync(fileUris[i],fs.OpenMode.READ_ONLY);
    let stat = fs.lstatSync(fileUris[i]);
    fs.closeSync(file.fd);
    let filename = fileUris[i].substring(fileUris[i].lastIndexOf("/") + 1);
    let name = filename.substring(0,filename.indexOf("."));
    let fileType = filename.substring(filename.indexOf(".") + 1);
    let path = fileUris[i].substring(fileUris[i].lastIndexOf("/cache"))
    files.push({
      filename: name,
      name: "files",
      uri: "internal:/" + path,
      type: fileType
    })
  };
  let formHeader = new Map<Object, string>();
  formHeader.set("Content-type","multipart/form-data")
  let formData : Array<request.RequestData> = [{name:"serviceCode",value:"handheld_bus_file"},
    {name:"twoServiceCode",value:"feedback"},
    {name:"lasting",value:"false"}
  ];
  let uploadConfig: request.UploadConfig = {
    url: UrlConst.ROOT_URL + UrlConst.FILE_UPLOAD_URL,
    header: formHeader,
    method: 'POST',
    files: files,
    data: formData
  }
  try {
    request.uploadFile(getContext(this), uploadConfig)
      .then((uploadTask: request.UploadTask) => {
        uploadTask.on('complete', (taskStates: Array<request.TaskState>) => {
          //删除缓存的文件
          this.deleteCache();
          this.submitMsg();

        });
        uploadTask.on("headerReceive",(header:ESObject)=> {
          if (header && header.body ){
            let data : ESObject = header.body
            let rst : BaseModel<FileUpInfo[]> = JSON.parse(header.body) as BaseModel<FileUpInfo[]>;
            let files : FileUpInfo[] | undefined = rst.result
            if (files && files.length > 0) {
              let temp : string[] = [];
              files.forEach((item:FileUpInfo) => {
                let url = "/sys/common/file-preview?id=" + item.id + "&preview=true";
                temp.push(url);
              })
              this.pics = temp;
            }
          }

        })
      })
      .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}`);
  }
}
  • 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.
分享
微博
QQ
微信
回复
2024-12-24 16:58:38
相关问题
如何在Stage模型中创建后台服务
2800浏览 • 1回复 待解决
台服务器如何安装双centos系统?
3121浏览 • 1回复 待解决
HarmonyOS 调用C++扣将数据写入文件
576浏览 • 1回复 待解决
HarmonyOS 沙箱访问获取不到文件
698浏览 • 1回复 待解决
HarmonyOS 后台长时服务,类型为定位
634浏览 • 1回复 待解决
HarmonyOS POST请求,服务端拿不到数据
1580浏览 • 1回复 待解决
HarmonyOS web桥原生代码方法
989浏览 • 1回复 待解决
HarmonyOS H5桥
979浏览 • 1回复 待解决
服务下的前后台用户是否分开?
3555浏览 • 1回复 待解决
手机端应用使用socket 服务后台保活
1070浏览 • 1回复 待解决
HarmonyOS webview桥方式如何编写
809浏览 • 1回复 待解决
VScode终端ssh连接不到Linux服务器问题
29296浏览 • 2回复 待解决