HarmonyOS 鸿蒙Next Axios使用PUT方法上传ArrayBuffer字节数组,后端图片无法查看

发布于 1周前 作者 bupafengyu 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Axios使用PUT方法上传ArrayBuffer字节数组,后端图片无法查看

ArrayBuffer是三方SDK扫描后返回的字节数组,页面通过把ArrayBuffer转换成PixelMap对象,可以赋值给Image组件展示;把ArrayBuffer数据通过PUT的方式上传到后台,后台预览出错;目前不清楚是图片上传损坏还是ArrayBuffer需要给定上传类型或者其它问题

2 回复

试试当上传的内容为ArrayBuffer时,参考以下demo,参考文档:https://gitee.com/openharmony-sig/ohos_axios#%E5%BD%93%E4%B8%8A%E4%BC%A0%E7%9A%84%E5%86%85%E5%AE%B9%E4%B8%BAarraybuffer%E6%97%B6%E7%94%A8%E6%B3%95%E5%A6%82%E4%B8%8B

import axios from '@ohos/axios'
import { FormData } from '@ohos/axios'
import fs from '@ohos.file.fs';

// ArrayBuffer
let formData = new FormData()
let cacheDir = getContext(this).cacheDir
try {
  // 写入
  let path = cacheDir + '/hello.txt';
  let file = fs.openSync(path, fs.OpenMode.CREATE | fs.OpenMode.READ_WRITE)
  fs.writeSync(file.fd, "hello, world"); // 以同步方法将数据写入文件
  fs.fsyncSync(file.fd); // 以同步方法同步文件数据。
  fs.closeSync(file.fd);
  // 读取
  let file2 = fs.openSync(path, 0o2);
  let stat = fs.lstatSync(path);
  let buf2 = new ArrayBuffer(stat.size);
  fs.readSync(file2.fd, buf2); // 以同步方法从流文件读取数据。
  fs.fsyncSync(file2.fd);
  fs.closeSync(file2.fd);
  formData.append('file', buf2);
  // formData.append('file', buf2, { filename: 'text.txt', type: 'text/plain'}); 设置多部分表单数据的数据名称和数据类型类型
} catch (err) {
  console.info('err:' + JSON.stringify(err));
}
// 发送请求
axios.post<string, AxiosResponse<string>, FormData>(this.uploadUrl, formData, {
  headers: { 'Content-Type': 'multipart/form-data' },
  context: getContext(this),
  onUploadProgress: (progressEvent: AxiosProgressEvent): void => {
    console.info(progressEvent && progressEvent.loaded && progressEvent.total ?
      Math.ceil(progressEvent.loaded / progressEvent.total * 100) + '%' : '0%');
  },
}).then((res: AxiosResponse) => {
  console.info("result" + JSON.stringify(res.data));
}).catch((error: AxiosError) => {
  console.error("error:" + JSON.stringify(error));
})

建议参考axios官网上传ArrayBuffer示例。

在HarmonyOS鸿蒙系统中使用Axios通过PUT方法上传ArrayBuffer字节数组时,如果后端图片无法查看,可能是由于以下几个原因导致的:

  1. Content-Type设置不当:确保在Axios请求中正确设置了Content-Typeapplication/octet-stream或根据后端要求的其他二进制数据类型,以指示上传的是二进制数据。

  2. 后端处理逻辑问题:后端接收并处理上传的ArrayBuffer字节数组时,需要正确解析并存储为图片文件。检查后端代码,确保数据被正确解码并保存为图片格式。

  3. 数据损坏:在传输过程中,ArrayBuffer字节数组可能因网络问题而损坏。确保网络稳定,并检查上传的数据是否完整。

  4. 路径或权限问题:后端存储图片的路径可能不正确,或者服务器对存储路径没有写权限。验证存储路径和服务器权限设置。

  5. 缓存问题:有时浏览器或服务器缓存可能导致无法立即看到更新后的图片。尝试清除缓存或强制刷新页面。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部