C# Xamarin文件Mime类型

C# Xamarin文件Mime类型,c#,android,ios,xamarin,C#,Android,Ios,Xamarin,我目前将开发一个Xamarin应用程序跨平台(iOS/Android),通过CrossDownloadManager下载一个文件,并使用SharpZipLib.Portable解压zip 所有这些都可以正常工作,但我想在将下载文件发送到解压库之前检查其mime类型,以避免出现任何问题。 我无法使用文件扩展名,因为它不是必需的。根据Curiousity的说法,这是您的操作方式: public String getMimeType(Uri uri) { String mimeType = n

我目前将开发一个Xamarin应用程序跨平台(iOS/Android),通过CrossDownloadManager下载一个文件,并使用SharpZipLib.Portable解压zip

所有这些都可以正常工作,但我想在将下载文件发送到解压库之前检查其mime类型,以避免出现任何问题。 我无法使用文件扩展名,因为它不是必需的。

根据Curiousity的说法,这是您的操作方式:

public String getMimeType(Uri uri) {
    String mimeType = null;
    if (uri.Scheme.Equals(ContentResolver.SchemeContent))
    {
        ContentResolver cr = Application.Context.ContentResolver;
        mimeType = cr.GetType(uri);
    }
    else
    {
        String fileExtension = MimeTypeMap.GetFileExtensionFromUrl(uri.ToString());
        mimeType = MimeTypeMap.Singleton.GetMimeTypeFromExtension(
        fileExtension.ToLower());
    }
    return mimeType;
}

*使用MimeTypes Nuget包:

您只需传递文件名即可获取其内容类型:

var mimeType = MimeTypes.GetMimeType(fileName);
这就是我如何在Xamarin.iOS[C#]中使用image picker的FinishedPickingMedia方法获取所拾取图像的mime类型


如果mime类型不正确,您将怎么做?只需将该文件传递到解压库,并确保其正确无误。
NSUrl referenceURL = e.Info[new NSString("UIImagePickerControllerReferenceURL")] as NSUrl;
if (referenceURL != null)
{
    var fileName = referenceURL.Path.ToString();
    var url = referenceURL.ToString();
    Console.WriteLine(referenceURL.ToString());
}


ALAssetsLibrary assetsLibrary = new ALAssetsLibrary();
assetsLibrary.AssetForUrl(referenceURL, delegate (ALAsset asset)
{
    ALAssetRepresentation representation = asset.DefaultRepresentation;
    if (representation!= null)
    {
        string fileName = representation.Filename;
        var mimeType = MimeTypes.GetMimeType(fileName);

    }

}, delegate (NSError error) {
    Console.WriteLine("User denied access to photo Library... {0}", error);
});