鸿蒙Next网络请求~上传文件pdf

发布于:2025-03-07 ⋅ 阅读:(32) ⋅ 点赞:(0)

使用场景,通过文档扫描生成pdf后,进行axios上传文件FormData。文档扫描生成文件路径为沙箱路径:file://com.huawei.hmsapp.hiai/data/storage/el2/base/haps/doc/files/com.aa.hms/DocumentScanner_1741249445097.pdf

主要代码:`

			//复制               
              fs.open(filePathString?.content, (err, file) => {
              if (err) {
                console.error("file open failed with error message: " + err.message + ", error code: " + err.code);
              } else {
              //文件名
                let filename = `${new Date().getTime()}.${'pdf'}`
                //获取上下文,我在工具类里面
                let filepath = AppUtil.getContext().cacheDir + '//' + filename

                LogUtil.debug('测试filename is:' + filename + ', file path is:' + filepath)
                fs.copyFile(file.fd, filepath, async () => {
					//根据axios文档
					//上传类型支持uri和ArrayBuffer,uri支持“internal”协议类型和沙箱路径。"internal://cache/"为必填字段,示例: internal://cache/path/to/file.txt;沙箱路径示例:cacheDir + '/hello.txt'
                  let internalUri = `internal://cache/${filename}`;

                  LogUtil.debug('测试internal uri is:' + internalUri)

                  let formData = new FormData()
                  formData.append('file', internalUri)
                  let uploadUrl = 'https://baidu.com'
                  // 发送请求
                  axios.post<string, AxiosResponse<string>, FormData>(uploadUrl,
                    formData, {
                      headers: { 'Content-Type': 'multipart/form-data' },
                      context: getContext(AppUtil.getContext()),
                      onUploadProgress: (progressEvent: AxiosProgressEvent): void => {
                        console.info('测试' + progressEvent && progressEvent.loaded && progressEvent.total ?
                          Math.ceil(progressEvent.loaded / progressEvent.total * 100) + '%' : '0%');
                      },
                    }).then((res: AxiosResponse) => {

                    const cameraAndFileScanBean =
                      JSONUtil.jsonToBean(CameraAndFileScanBean, JSON.stringify(res.data))
                    resolve(cameraAndFileScanWebResultBean);
                  }).catch((error: AxiosError) => {
                    console.error("测试error:" + JSON.stringify(error));
                  })
                })
              }

            })

`