You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI Android中使用Mega API下载文件无响应问题

问题排查与修复:.NET MAUI Android 下 Mega API 无下载效果

核心问题分析

你的代码存在几个关键问题导致下载无效果:

  1. 异步方法未等待:DownloadFileAsync是异步方法,但你直接调用未加await,导致下载还没执行完就执行了Logout,客户端提前断开,下载被终止。
  2. 构造函数内执行异步操作:ContentPage的构造函数不适合执行长时间异步任务,容易阻塞UI初始化或导致操作被系统中断,应放到页面生命周期方法中执行。
  3. 硬编码路径的权限问题:直接写/storage/emulated/0/Downloads可能触发Android存储权限限制,且不同设备的路径可能存在差异。
  4. 无异常捕获:没有对异步操作添加异常处理,无法排查潜在的错误信息。

修复后的代码

namespace Junior_Jobs;

using CG.Web.MegaApiClient;
using Microsoft.Maui.Storage;
using System;
using System.Threading.Tasks;

public partial class Tryimportimage : ContentPage
{
    public Tryimportimage()
    {
        InitializeComponent();
    }

    protected override async void OnAppearing()
    {
        base.OnAppearing();
        await DownloadMegaFileAsync();
    }

    private async Task DownloadMegaFileAsync()
    {
        MegaApiClient client = null;
        try
        {
            client = new MegaApiClient();
            await client.LoginAnonymousAsync();

            Uri fileLink = new Uri("https://mega.nz/file/W0UAgJaK#XOYyTETrIy8daz3_dw3fdh6Hh8EFEdrnbyoop1r9R6g");
            INode node = await client.GetNodeFromLinkAsync(fileLink);

            System.Diagnostics.Debug.WriteLine($"Downloading {node.Name}");

            // 使用MAUI标准化路径,避免权限和路径兼容问题
            var downloadPath = Path.Combine(FileSystem.Current.GetFolderPath(SpecialFolder.Downloads), node.Name);

            await client.DownloadFileAsync(fileLink, downloadPath);

            System.Diagnostics.Debug.WriteLine($"Download completed: {downloadPath}");
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine($"Download error: {ex.Message}");
            // 可在此添加UI提示,比如弹窗告知用户下载失败
        }
        finally
        {
            client?.Logout();
        }
    }
}

额外配置步骤

  • 权限申请:在Android项目的AndroidManifest.xml中添加存储权限:
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" android:minSdkVersion="33" />
    
    对于Android 13+,需要用MAUI的Permissions类动态申请Permissions.Media.ReadImages权限。
  • 异步规范:所有异步操作必须用await等待完成,避免“调用即丢弃”的写法,确保操作完整执行。
  • 生命周期使用:页面的异步任务优先放在OnAppearing中执行,构造函数仅做UI初始化工作。

内容的提问来源于stack exchange,提问作者8TILMATE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:27:24