HarmonyOS 鸿蒙Next Arkts上传文件后端无法接收请求,显示上传成功但SpringBoot后端无法收到该请求

HarmonyOS 鸿蒙Next Arkts上传文件后端无法接收请求,显示上传成功但SpringBoot后端无法收到该请求

使用上传文件,request.upload

前端代码:

public uploadFile (fileNames: string[], orderId: number) {
    let uploadTask;
    let uploadConfig = {
      url: `${CommonConstants.BASE_URL}/image/common/handleFilesTest1`,
      header: {'Content-Type': 'multipart/form-data; boundary=<calculated when request is sent>'},
      method: "POST",
      files: [{ filename: fileNames[0], name: "test", uri: "internal://cache/" + fileNames[0], type: "jpg" }],
      data: [{ name: "orderId", value: orderId.toString() }],
    };
    if (fileNames.length === 0) {
      return;
    } else {
      uploadConfig.files = [];
      for (let fileName of fileNames) {
        let file = {
          filename: fileName,
          name: "test",
          uri: "internal://cache/" + fileName,
          type: "jpg"
        }
        uploadConfig.files.push(file);
      }
      console.log("upload files " + uploadConfig.files)
      console.log("upload data " + JSON.stringify(uploadConfig.data))
    }
    try {
      request.uploadFile(getContext(this), uploadConfig).then((data) => {
        uploadTask = data;
        console.log("上传照片成功" + JSON.stringify(data))
      }).catch((err) => {
        console.error('上传照片失败Failed to request the upload. Cause: ' + JSON.stringify(err));
      });
    } catch (err) {
      console.error('上传照片失败err.code : ' + err.code + ', err.message : ' + err.message);
    }
  }

后端代码

@PostMapping("/handleFiles")
public ResultVo handleFiles(@RequestParam("files") MultipartFile[] files, @RequestParam("data") String dataList) {
    System.out.println("filefile-----------------------------11111111111111111111111");
    List<data>  list = JSON.parseArray(dataList, data.class);
    for (int i = 0; i < files.length; i++) {
        String filePath = fileUploadService.imageToURL(files[i]);
        int orderId = Integer.parseInt(list.get(i).getValue());
        UpdateWrapper<RepairOrder> repairOrderUpdateWrapper = new UpdateWrapper<>();
        int temp = i + 1;
        String col = "spot_picture" + Integer.toString(temp);
        repairOrderUpdateWrapper.eq("order_id", orderId)
            .set(col,filePath);
        repairOrderService.update(repairOrderUpdateWrapper);
    }
    return ResultUtils.success("成功上传图片");
}

@PostMapping("/handleFilesTest")
public ResultVo handleFilesTest(String orderId, @RequestParam("files") MultipartFile[] files) {
    System.out.println("filefile-----------------------------22222222222222222");

    for (int i = 0; i < files.length; i++) {
        String filePath = fileUploadService.imageToURL(files[i]);
        int id = Integer.parseInt(orderId);
        UpdateWrapper<RepairOrder> repairOrderUpdateWrapper = new UpdateWrapper<>();
        int temp = i + 1;
        String col = "spot_picture" + Integer.toString(temp);
        repairOrderUpdateWrapper.eq("order_id", id)
            .set(col,filePath);
        repairOrderService.update(repairOrderUpdateWrapper);
    }
    return ResultUtils.success("成功上传图片");
}

@PostMapping("/handleFilesTest1")
public ResultVo handleFilesTest1(String orderId, MultipartHttpServletRequest multiPartRequest) {
    System.out.println("filefile-----------------------------22222222222222222");
    Iterator<String> itr =  multiPartRequest.getFileNames();
    List<MultipartFile> fileList = new ArrayList<>();
    while (itr.hasNext()) {
        String fileName = itr.next();
        System.out.println("fileName: " + fileName);
        fileList = multiPartRequest.getFiles(fileName);
        System.out.println("filesSize: " + fileList.size());
        break;
    }
    for (int i = 0; i < fileList.size(); i++) {
        System.out.println("file " + i + ":" + fileList.get(i));
        String filePath = fileUploadService.imageToURL(fileList.get(i));
        int id = Integer.parseInt(orderId);
        UpdateWrapper<RepairOrder> repairOrderUpdateWrapper = new UpdateWrapper<>();
        int temp = i + 1;
        String col = "spot_picture" + Integer.toString(temp);
        repairOrderUpdateWrapper.eq("order_id", id)
            .set(col,filePath);
        repairOrderService.update(repairOrderUpdateWrapper);
    }
    return ResultUtils.success("成功上传图片");
}

这三种都尝试过了,都无法接受到前端的upload请求,我想请问一下,是不是我后端的参数设置有问题,后端无论在本地还是服务器,都无法接受到upload请求。 另外,我是在模拟机上面执行的,还没有在真机上面试过。


更多关于HarmonyOS 鸿蒙Next Arkts上传文件后端无法接收请求,显示上传成功但SpringBoot后端无法收到该请求的实战教程也可以访问 https://www.itying.com/category-93-b0.html

8 回复

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/js-apis-request-0000001428061972-V2#ZH-CN_TOPIC_0000001574248669__onheaderreceive7

可以参考开启on(‘headerReceive’),上传文件后接受后端返回数据。其中响应体的 header 和 body 都会在这个 header object 里存放。

更多关于HarmonyOS 鸿蒙Next Arkts上传文件后端无法接收请求,显示上传成功但SpringBoot后端无法收到该请求的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


已经解决了,发现是自己把图库的照片复制到cache的时候少打了一个/,希望后面的朋友们引以为戒。

请问楼主解决了吗,我也遇到这个问题,你试试上传一个很小的图片试试,我很小的就能够上传

你好!我用的几百k的照片测试还是不可以,请问可以看看你的后端接口的代码(参数如何存取)和app端上传文件的代码吗?

HarmonyOS的分布式文件系统让我在多设备间共享文件变得更加方便。

另外,后端接口我在postman测试,后端是可以接收到这个请求并且成功处理的

![cke_1017.png](https://alliance-communityfile-drcn.dbankcdn.com/FileServer/getFile/cmtybbs/397/548/494/2850086000397548494.20240325164003.70224769571760122709185669921280:50001231000000:2800:06BFCFC40B11E215DEC5D493BFA82AF68907016CEF6EC99735E82362ED385D89.png)

在HarmonyOS鸿蒙Next中使用ArkTS上传文件时,如果前端显示上传成功但SpringBoot后端无法接收到请求,可能的原因包括:

  • 网络请求配置问题:ArkTS中的网络请求配置可能未正确设置,如URL、请求方法、请求头等,导致请求未正确发送到后端。
  • 跨域问题:如果前端和后端部署在不同的域名或端口下,可能存在跨域问题,导致请求被浏览器拦截。
  • 请求体格式问题:上传文件时,请求体的格式(如multipart/form-data)可能未正确设置,导致后端无法解析。
  • 文件大小限制:后端可能对上传文件的大小进行了限制,超过限制的文件会被拒绝。
  • 后端接口问题:后端的接口可能未正确处理文件上传请求,或者接口路径、参数等配置有误。
  • 网络代理或防火墙:网络中的代理或防火墙可能拦截了上传请求,导致后端无法接收到请求。
  • 日志记录问题:后端可能未正确记录接收到的请求日志,导致看似未接收到请求。
  • 前端代码问题:前端代码可能存在逻辑错误,如未正确触发上传事件或未正确处理上传结果。
  • 服务器配置问题:服务器可能未正确配置,导致无法处理上传请求。
  • 版本兼容性问题:ArkTS与SpringBoot的版本可能存在兼容性问题,导致请求无法正常处理。

建议检查上述可能的错误点,确保网络请求配置正确、跨域问题解决、请求体格式正确、文件大小符合限制、后端接口正确处理、网络代理或防火墙未拦截请求、日志记录正确、前端代码无误、服务器配置正确以及版本兼容性良好。

在HarmonyOS 鸿蒙Next Arkts上传文件时,后端无法接收请求,可能是以下几个原因导致的:

  1. 请求头设置问题:检查上传文件的请求头是否正确,确保Content-Type设置为multipart/form-data,并且包含boundary

  2. 文件数据格式:确保文件数据以正确的格式发送,SpringBoot通常使用MultipartFile接收文件,确保文件数据与后端接口匹配。

  3. 网络请求配置:确认网络请求配置是否正确,包括URL、请求方法(POST)等。

  4. 后端接口问题:检查后端接口是否正确处理文件上传请求,确保@RequestParam@RequestPart注解使用正确。

  5. 日志调试:启用SpringBoot的日志调试,查看请求是否到达后端,是否有异常信息。

如果问题依旧,建议通过抓包工具(如Wireshark或Fiddler)分析请求数据,确保请求格式和内容符合后端要求。

回到顶部