uni-app html5plus API无法存储任意类型文件到外部公共路径下

uni-app html5plus API无法存储任意类型文件到外部公共路径下

开发环境 版本号 项目创建方式
Windows WIN11 HBuilderX

操作步骤:

  • 官网帖子 https://ask.dcloud.net.cn/article/36199 对 Android 文件系统理解有误。
  • 在Android 11+系统中,仍然支持外部公共路径(例如/storage/emulated/0/Download)下的任意类型文件存储,只不过需要新的权限MANAGE_EXTERNAL_STORAGE。标准基座缺少这一权限。
  • WebApp必然需要存储各种类型的文件到外部公共路径,希望 html5plus 尽快根据 Android 11+ 标准,改进API,实现这一功能。

预期结果:

  • 官网帖子 https://ask.dcloud.net.cn/article/36199 对 Android 文件系统理解有误。
  • 在Android 11+系统中,仍然支持外部公共路径(例如/storage/emulated/0/Download)下的任意类型文件存储,只不过需要新的权限MANAGE_EXTERNAL_STORAGE。标准基座缺少这一权限。
  • WebApp必然需要存储各种类型的文件到外部公共路径,希望 html5plus 尽快根据 Android 11+ 标准,改进API,实现这一功能。

实际结果:

  • 官网帖子 https://ask.dcloud.net.cn/article/36199 对 Android 文件系统理解有误。
  • 在Android 11+系统中,仍然支持外部公共路径(例如/storage/emulated/0/Download)下的任意类型文件存储,只不过需要新的权限MANAGE_EXTERNAL_STORAGE。标准基座缺少这一权限。
  • WebApp必然需要存储各种类型的文件到外部公共路径,希望 html5plus 尽快根据 Android 11+ 标准,改进API,实现这一功能。

bug描述:

  • 官网帖子 https://ask.dcloud.net.cn/article/36199 对 Android 文件系统理解有误。
  • 在Android 11+系统中,仍然支持外部公共路径(例如/storage/emulated/0/Download)下的任意类型文件存储,只不过需要新的权限MANAGE_EXTERNAL_STORAGE。标准基座缺少这一权限。
  • WebApp 必然需要存储各种类型的文件到外部公共路径,希望 html5plus 尽快根据 Android 11+ 标准,改进API,实现这一功能。

更多关于uni-app html5plus API无法存储任意类型文件到外部公共路径下的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app html5plus API无法存储任意类型文件到外部公共路径下的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 UniApp 中使用 HTML5+ API 时,确实存在一些限制,尤其是在存储文件到外部公共路径时。HTML5+ API 提供了 plus.io 模块来处理文件系统操作,但默认情况下,它不允许直接将任意类型的文件存储到外部公共路径(如 SD 卡或外部存储)中,主要是出于安全性和权限的考虑。

解决方案

  1. 使用 plus.iorequestFileSystem 方法: 你可以使用 plus.io.requestFileSystem 方法来请求文件系统,然后通过 plus.io.resolveLocalFileSystemURL 来获取文件系统的根目录。之后,你可以将文件写入到指定的路径。

    plus.io.requestFileSystem(plus.io.PUBLIC_EXTERNAL, function(fs) {
        fs.root.getFile('example.txt', { create: true }, function(fileEntry) {
            fileEntry.createWriter(function(writer) {
                writer.write('Hello, World!');
            }, function(error) {
                console.error('Failed to write file: ' + error.message);
            });
        }, function(error) {
            console.error('Failed to get file: ' + error.message);
        });
    }, function(error) {
        console.error('Failed to request file system: ' + error.message);
    });
    
  2. 使用 plus.downloader 下载文件到外部存储: 如果你需要从网络下载文件并存储到外部存储,可以使用 plus.downloader 模块。

    var downloadTask = plus.downloader.createDownload('https://example.com/file.zip', {
        filename: '_downloads/file.zip' // 存储路径
    }, function(download, status) {
        if (status == 200) {
            console.log('Download success: ' + download.filename);
        } else {
            console.error('Download failed: ' + status);
        }
    });
    downloadTask.start();
    
  3. 使用 plus.gallery 保存文件到相册: 如果你需要将文件保存到相册(如图片或视频),可以使用 plus.gallery 模块。

    plus.gallery.save('https://example.com/image.jpg', function() {
        console.log('Image saved to gallery');
    }, function(error) {
        console.error('Failed to save image: ' + error.message);
    });
    
  4. 申请存储权限: 在 Android 平台上,你可能需要申请 WRITE_EXTERNAL_STORAGE 权限才能将文件写入外部存储。你可以在 manifest.json 中配置权限:

    {
        "permissions": {
            "android": [
                "android.permission.WRITE_EXTERNAL_STORAGE"
            ]
        }
    }
    

    并在运行时动态申请权限:

    plus.android.requestPermissions(['android.permission.WRITE_EXTERNAL_STORAGE'], function(result) {
        if (result.deniedPermissions.length > 0) {
            console.error('Permission denied');
        } else {
            console.log('Permission granted');
        }
    }, function(error) {
        console.error('Failed to request permissions: ' + error.message);
    });
回到顶部