HarmonyOS鸿蒙Next中图片以文件形式上传后台拿不到值

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

HarmonyOS鸿蒙Next中图片以文件形式上传后台拿不到值 图片以文件形式上传 后台拿不到值

3 回复

可以参考以下demo

import axios from '@ohos/axios'
import { FormData } from '@ohos/axios'

let formData = new FormData()

formData.append('file', 'internal://cache/blue.jpg')

// formData.append('file', cacheDir + '/hello.txt'); uri支持传入沙箱路径

// 发送请求
axios.post<string, AxiosResponse<string>, FormData>('https://www.xxx.com/upload', 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<string>) => {
  console.info("result" + JSON.stringify(res.data));
}).catch((err: AxiosError) => {
  console.error("error:" + JSON.stringify(err));
})

import picker from '@ohos.file.picker';
import fs from '@ohos.file.fs';
import axios, { AxiosError, AxiosProgressEvent, AxiosResponse } from '@ohos/axios'
import { FormData } from '@ohos/axios'
import { common } from '@kit.AbilityKit';

@Entry
@Component
struct Index {
  @State message: string = 'hello World';

  context = getContext(this) as common.UIAbilityContext

  build() {
    Button('选择').onClick(() => {
      let uris: Array<string> = [];
      let documentViewPicker = new picker.PhotoViewPicker();
      documentViewPicker.select({
        MIMEType: picker.PhotoViewMIMETypes.IMAGE_TYPE,
        maxSelectNumber: 1
      }).then((photoSelectResult: picker.PhotoSelectResult) => {
        uris = photoSelectResult.photoUris;
        console.info('photoViewPicker.select to file succeed and uris are:' + uris);
        let fileSource = fs.openSync(uris[0], fs.OpenMode.READ_ONLY);
        let fileDes = fs.openSync(`${this.context.cacheDir}/1.jpg`, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
        fs.copyFileSync(fileSource.fd, fileDes.fd)
        fs.closeSync(fileSource);
        fs.closeSync(fileDes);
        let formData = new FormData()
        formData.append('file', `${this.context.cacheDir}/1.jpg`); //uri支持传入沙箱路径
        // 发送请求
      })
    })
  }
}

更多关于HarmonyOS鸿蒙Next中图片以文件形式上传后台拿不到值的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,图片以文件形式上传后台拿不到值,可能涉及以下技术点:

  1. 文件上传机制:鸿蒙Next采用分布式文件系统,上传文件时需确保文件路径正确且文件存在。检查文件路径和权限设置。

  2. 网络请求配置:上传文件时,需配置网络请求参数,包括请求方法、请求头和请求体。确认请求方法为POST,请求头包含Content-Type: multipart/form-data,请求体正确包含文件数据。

  3. 文件数据格式:确保文件数据以二进制形式上传,且文件数据格式与后台期望一致。检查文件数据和后台接口的格式要求。

  4. 后台接口处理:后台接口需正确处理文件上传请求,解析文件数据并存储。检查后台接口代码,确保文件数据被正确接收和处理。

  5. 日志和调试:在开发和测试阶段,使用日志和调试工具检查文件上传过程中的数据流动和错误信息。查看日志和调试信息,定位问题所在。

  6. 安全策略:鸿蒙Next可能实施了安全策略,限制文件上传的类型和大小。检查安全策略,确保文件类型和大小符合要求。

  7. API调用:使用鸿蒙Next提供的API进行文件上传,确保API调用正确。检查API调用代码,确保参数和返回值处理正确。

通过以上技术点的检查和调整,可以解决HarmonyOS鸿蒙Next中图片以文件形式上传后台拿不到值的问题。

在HarmonyOS鸿蒙Next中,如果图片以文件形式上传后台无法获取值,可能是以下原因导致的:

  1. 文件路径错误:确保上传的文件路径正确,路径错误会导致后台无法找到文件。

  2. 权限问题:检查应用是否具备读取和写入文件的权限,缺少权限会导致文件访问失败。

  3. 上传接口问题:确认后台接口是否正确配置以接收文件上传,接口问题可能导致文件无法正常传输。

  4. 文件格式或大小限制:检查文件格式和大小是否符合后台接口的要求,不符合可能导致上传失败。

  5. 网络问题:确保网络连接正常,网络问题可能导致文件上传失败。

建议逐一排查上述原因,确保文件路径、权限、接口配置和网络连接都正确无误。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!