uni-app 云打包 targetSdkVersion=29或30 时,鸿蒙系统 webview调用远端页面上传图片弹出net::ERR_ACCESS_DENIED
uni-app 云打包 targetSdkVersion=29或30 时,鸿蒙系统 webview调用远端页面上传图片弹出net::ERR_ACCESS_DENIED
操作步骤:
- 选择手机图库文件,然后点击上传按钮
预期结果:
- 上传按钮页面回调调用后台cs代码
实际结果:
-
鸿蒙系统HarmonyOS测试:
- 使用真机调试直接调试,上面的上传功能正常
- 使用云打包targetSdkVersion=28时安装,上面的上传功能正常
- 使用云打包targetSdkVersion=29或者30时安装,点击上传按钮会弹出网页无法打开 位于 **的页面无法加载,因为:net::ERR_ACCESS_DENIED
-
主要表现在sdk 28时选择图库文件或者相机会先询问权限是否允许访问设备上的照片、媒体内容和文件
-
sdk 29 30 时没有询问权限
bug描述:
- 测试手机 华为手机P20 Pro ,nova 都是 鸿蒙系统HarmonyOS
- H5+ APP WebView调用远程Apsx页面(一个上传文件的页面)
<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="false" CodeBehind="fileupload.aspx.cs" Inherits="fileupload" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<title></title>
<link href="../MUI/css/mui.min.css" rel="stylesheet" />
<link href="../Content/css/app.css" rel="stylesheet" />
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="FileUpload1" runat="server" /><br />
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="上传" />
</div>
</form>
</body>
</html>
-
Android系统10,11测试:
- 上面的上传功能正常
-
鸿蒙系统HarmonyOS测试:
- 使用真机调试直接调试,上面的上传功能正常
- 使用云打包targetSdkVersion=28时安装,上面的上传功能正常
- 使用云打包targetSdkVersion=29或者30时安装,点击上传按钮会弹出网页无法打开 位于 **的页面无法加载,因为:net::ERR_ACCESS_DENIED
图片

更多关于uni-app 云打包 targetSdkVersion=29或30 时,鸿蒙系统 webview调用远端页面上传图片弹出net::ERR_ACCESS_DENIED的实战教程也可以访问 https://www.itying.com/category-93-b0.html
问题已记录,等待验证
更多关于uni-app 云打包 targetSdkVersion=29或30 时,鸿蒙系统 webview调用远端页面上传图片弹出net::ERR_ACCESS_DENIED的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
这是Android 10(API 29)引入的存储权限策略变更(Scoped Storage)导致的兼容性问题。当targetSdkVersion≥29时,应用默认启用分区存储,WebView访问文件需要特殊处理。
解决方案:
-
临时方案:在
manifest.json中配置targetSdkVersion为28,但这不是长久之计,Google Play要求2023年8月起targetSdkVersion必须≥33。 -
推荐方案:在
manifest.json的app-plus->distribute->android节点下添加以下配置:
{
"permissions": [
"<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" android:maxSdkVersion=\"28\" />",
"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" android:maxSdkVersion=\"28\" />"
],
"android": {
"permissionExternalStorage": {
"request": "none"
}
}
}
- WebView适配:对于远程页面中的文件上传,需要修改WebView的配置。在页面初始化时添加:
// 在uni-app的页面中
onLoad() {
// #ifdef APP-PLUS
const currentWebview = this.$scope.$getAppWebview();
const webview = currentWebview.children()[0];
webview.setStyle({
fileAccess: true
});
// #endif
}
- 鸿蒙系统特别处理:在
src/main/AndroidManifest.xml中添加(如存在):
<application
android:requestLegacyExternalStorage="true"
android:usesCleartextTraffic="true">
- 检查网络配置:确保
manifest.json中已允许HTTP请求:
{
"app-plus": {
"security": {
"network": {
"cleartextTraffic": true
}
}
}
}

