파일 선택기

Browse sample. 샘플 찾아보기

이 문서에서는 .NET 다중 플랫폼 앱 UI(.NET MAUI) IFilePicker 인터페이스를 사용하는 방법을 설명합니다. 인터페이스를 IFilePicker 사용하면 디바이스에서 하나 이상의 파일을 선택하라는 메시지를 사용자에게 표시할 수 있습니다.

인터페이스의 IFilePicker 기본 구현은 속성을 통해 FilePicker.Default 사용할 수 있습니다. IFilePicker 인터페이스와 FilePicker 클래스는 모두 네임스페이스에 Microsoft.Maui.Storage 포함됩니다.

시작하기

기능에 액세스 FilePicker 하려면 다음 플랫폼별 설정이 필요합니다.

앱이 Android 12 이하를 대상으로 하는 경우 권한을 요청 READ_EXTERNAL_STORAGE 해야 합니다. 앱이 Android 13 이상을 대상으로 하고 다른 앱이 만든 파일에 액세스해야 하는 경우 권한 대신 READ_EXTERNAL_STORAGE 다음 세분화된 권한 중 하나 이상을 요청해야 합니다.

  • READ_MEDIA_IMAGES
  • READ_MEDIA_VIDEO
  • READ_MEDIA_AUDIO

이러한 권한은 다음과 같은 방법으로 추가할 수 있습니다.

  • 어셈블리 기반 권한을 추가합니다.

    Platforms/Android/MainApplication.cs 파일을 열고 지시문 다음에 using 다음 어셈블리 특성을 추가합니다.

    [assembly: UsesPermission(Android.Manifest.Permission.ReadExternalStorage, MaxSdkVersion = 32)]
    [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaAudio)]
    [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaImages)]
    [assembly: UsesPermission(Android.Manifest.Permission.ReadMediaVideo)]
    

    - 또는 -

  • Android 매니페스트를 업데이트합니다.

    Platforms/Android/AndroidManifest.xml 파일을 열고 노드에 다음을 manifest 추가합니다.

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
    <!-- Required only if your app needs to access images or photos that other apps created -->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <!-- Required only if your app needs to access videos that other apps created -->
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
    <!-- Required only if your app needs to access audio files that other apps created -->
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />    
    

    - 또는 -

  • 매니페스트 편집기에서 Android 매니페스트를 업데이트합니다.

    Visual Studio에서 Platforms/Android/AndroidManifest.xml 파일을 두 번 클릭하여 Android 매니페스트 편집기를 엽니다. 그런 다음, 필수 사용 권한에서 위에 나열된 사용 권한을 검사. 그러면 AndroidManifest.xml 파일이 자동으로 업데이트됩니다.

Important

권한 검사 및 요청은 .NET MAUI에서 자동으로 처리되므로 UI 스레드에서 모든 메서드를 호출해야 합니다.

파일 선택

이 메서드는 PickAsync 디바이스에서 파일을 선택하라는 메시지를 사용자에게 표시합니다. 선택기에서 PickOptions 허용되는 제목 및 파일 형식을 지정하려면 이 형식을 사용합니다. 다음 예제에서는 선택기를 열고 선택한 이미지를 처리하는 방법을 보여 줍니다.

public async Task<FileResult> PickAndShow(PickOptions options)
{
    try
    {
        var result = await FilePicker.Default.PickAsync(options);
        if (result != null)
        {
            if (result.FileName.EndsWith("jpg", StringComparison.OrdinalIgnoreCase) ||
                result.FileName.EndsWith("png", StringComparison.OrdinalIgnoreCase))
            {
                using var stream = await result.OpenReadAsync();
                var image = ImageSource.FromStream(() => stream);
            }
        }

        return result;
    }
    catch (Exception ex)
    {
        // The user canceled or something went wrong
    }

    return null;
}

기본 파일 형식은 FilePickerFileType.Images, FilePickerFileType.PngFilePickerFilerType.Videos로 제공됩니다. 클래스의 FilePickerFileType 인스턴스를 만들어 플랫폼당 사용자 지정 파일 형식을 지정할 수 있습니다. 이 클래스의 생성자는 플랫폼을 식별하기 위해 형식으로 DevicePlatform 키가 지정된 사전을 사용합니다. 사전 키의 값은 파일 형식을 나타내는 문자열의 컬렉션입니다. 예를 들어 특정 만화 파일 형식을 지정하는 방법은 다음과 같습니다.

var customFileType = new FilePickerFileType(
                new Dictionary<DevicePlatform, IEnumerable<string>>
                {
                    { DevicePlatform.iOS, new[] { "public.my.comic.extension" } }, // UTType values
                    { DevicePlatform.Android, new[] { "application/comics" } }, // MIME type
                    { DevicePlatform.WinUI, new[] { ".cbr", ".cbz" } }, // file extension
                    { DevicePlatform.Tizen, new[] { "*/*" } },
                    { DevicePlatform.macOS, new[] { "cbr", "cbz" } }, // UTType values
                });

PickOptions options = new()
{
    PickerTitle = "Please select a comic file",
    FileTypes = customFileType,
};

파일 형식에 따라 파일을 검색하는 것은 플랫폼과 다른 플랫폼과 다를 수 있습니다. 자세한 내용은 플랫폼 차이점을 참조 하세요.

여러 파일 선택

사용자가 여러 파일을 선택하도록 하려면 메서드를 호출합니다 FilePicker.PickMultipleAsync . 또한 이 메서드는 매개 변수를 PickOptions 사용하여 추가 정보를 지정합니다. 결과는 반환되는 PickAsync형식 IEnumerable<FileResult> 대신 FileResult 선택한 모든 파일과 함께 형식이 반환됩니다.

속성이 FullPath 파일의 실제 경로를 항상 반환하지는 않습니다. 파일을 가져오려면,OpenReadAsync 메서드를 사용합니다.

플랫폼 간 차이점

이 섹션에서는 파일 선택기와의 플랫폼별 차이점에 대해 설명합니다.

PickOptions.PickerTitle 메시지는 사용자에게 초기 프롬프트에 표시되지만 선택기 대화 자체에는 표시되지 않습니다.

형식별로 파일을 필터링할 때 파일의 MIME 형식을 사용합니다. MIME 형식 목록은 Mozilla - Common MIME 형식을 참조 하세요.