1

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

一切正常,但我想在将下载文件发送到解压缩库之前检查下载文件的 mime 类型以避免任何问题。我不能使用文件的扩展名,因为不是必需的。

4

2 回答 2

1

根据好奇的回答,这就是你的做法:

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;
}
于 2018-11-16T13:48:37.023 回答
0

*使用 MimeTypes Nuget 包:https ://www.nuget.org/packages/MimeTypes/

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

var mimeType = MimeTypes.GetMimeType(fileName);

这就是我在 Xamarin.iOS [C#] 中使用图像选择器的 FinishedPickingMedia 方法获取图像的 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);
});
于 2019-07-08T08:05:55.807 回答