HarmonyOS通过 rawfile 中内容构造请求失败

通过如下代码获得 rawfile 文件 fd。

return getContext(this).resourceManager.getRawFd(this._dir + "/" + assetPath) 
  .then((rawFile) => { 
    RLogger.debug(TAG, "hit cache " + fileUrl + ", {" + rawFile.fd + ", " + rawFile.length + "}") 
    return new CacheEntry(rawFile.fd, rawFile.length, fileUrl, url) 
  })

通过接口 webResopnse.setResponseData(fd) 将rawFile.fd 设置到构造的 webResponse 中,代码如下:

static updateSuccessCacheResponse(cacheEntry: CacheEntry, webResponse: WebResourceResponse): WebResourceResponse { 
  let mimeType = MimeUtils.getMimeType(RequestUtils.getExtensionFromUrl(cacheEntry.remoteUrl)) 
  return RequestUtils.updateSuccessResponse(cacheEntry.fd, mimeType, webResponse) 
} 
private static updateSuccessResponse(data: ArrayBuffer|number, mimeType: string|undefined, webResponse: WebResourceResponse): WebResourceResponse { 
  webResponse.setResponseEncoding('utf-8'); 
  webResponse.setResponseData(data); 
  if (mimeType !== undefined) { 
    webResponse.setResponseMimeType(mimeType); 
  } 
  webResponse.setResponseCode(200); 
  webResponse.setReasonMessage('OK'); 
  webResponse.setResponseHeader([{ 
    headerKey: 'Access-Control-Allow-Origin', 
    headerValue: '*' 
  }]) 
  webResponse.setResponseIsReady(true); 
  return webResponse 
}

通过该方法构造的 response 会失败,文件内容无法访问。当使用自己保存的缓存文件,使用 fs.open(path, fs.OpenMode.READ_ONLY) 获取到的 fd 可以成功。

HarmonyOS
2024-08-14 15:39:24
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

getRawFd这个就是获取rawfile文件所在hap包的fd,而不是当成rawfile文件的fd。rawfile没有句柄,要么通过OpenRowFileConent直接过去,要么把文件放在resfile资源目录,通过文件路径访问。

分享
微博
QQ
微信
回复
2024-08-14 23:17:56
相关问题
Native获取Rawfile内容并打印
705浏览 • 1回复 待解决
HarmonyOS ArkTS如何实现泛型构造函数
361浏览 • 1回复 待解决
Harmonyos js fetch请求失败
8509浏览 • 2回复 待解决
javaUI webview通过布局创建实例失败
5509浏览 • 1回复 待解决
Js 荣耀手机get请求失败
5025浏览 • 1回复 待解决
HarmonyOS如何解压rawfile的zip文件
286浏览 • 1回复 待解决
HSPrawfile里的视频不能播放
228浏览 • 1回复 待解决
pthread创建的线程如何读取rawfile
1878浏览 • 1回复 待解决
rawfilezip复制并解压到沙箱路径
1252浏览 • 1回复 待解决
熄屏状态下网络请求失败
1794浏览 • 1回复 待解决