【发布时间】:2021-01-12 22:19:27
【问题描述】:
我正在尝试使用 Xamarin.Forms 中的 FilePicker 过滤文件。具体来说,SQLite 的 .db3 文件。为了在 Android 中过滤文件,您应该提供要显示的文件的 FilePicker MIME 类型。这就是我所做的,基于我发现 SQLite 文件具有的 MIME 类型:
var fileTypes = new string[] { "application/x-sqlite3", "application/vnd.sqlite3" };
var file = await CrossFilePicker.Current.PickFile(fileTypes);
我也尝试将"application/db3"、"application/db" 放入fileTypes 数组中,但无济于事。 我唯一一次可以过滤 SQLite 文件以及其他一些文件,是我将 "application/*" 放入数组时,这意味着 MIME 类型是应用程序。
这些 MIME 类型对我不起作用。我也尝试过使用 Xamarin 的 Android.Webkit.MimeTypeMap 类获取 MIME 类型,如下所示:
var MIME = MimeTypeMap.Singleton;
string sqliteMIME = MIME.GetMimeTypeFromExtension("sqlite");
我尝试将"sqltie3"、"sqltie"、"db3"、"db"、"db0" 传递给函数调用,函数每次都返回null。
FilePicker 的 Github 仓库:https://github.com/jfversluis/FilePicker-Plugin-for-Xamarin-and-Windows
我在 SQLite 的 MIME 类型上找到的信息:
【问题讨论】:
-
查看
application/pdf是否返回pdf(反之亦然)和text/x-java是否返回java。如果那些从GetMimeTypeFromExtension等正确返回,但是像png这样常见的东西不会返回image/png(png不包含在基本 ASOP mime 提供程序中),那么听起来设备是使用库存 ASOP 而不是通过SetDefaultSupplier提供 mime 类型供应商,如果是这样,我想知道您使用的是什么设备???? -
我尝试过使用模拟 Pixel 3a [Android 9.0 - API28]、物理 Pixel 3a [Android 11.0 - API30] 和物理小米 Mi A1 [Android 9.0 - API28]。除了小米,一切都与
pdf、java、png和csv文件类型完美配合。小米无法过滤java文件。 -
@E.Epstein 我检查了 MIME 类型的源代码。没有 db mime 类型。你可以参考下面的链接。 android.googlesource.com/platform/libcore/+/android-cts-6.0_r26/…
-
@WendyZang-MSFT,我明白了。那么有没有办法在 SQLite 文件中进行过滤呢?
-
您可以使用
FileName进行过滤。尝试使用result.FileName.EndsWith("db", StringComparison.OrdinalIgnoreCase)过滤。请检查链接。 docs.microsoft.com/en-us/xamarin/essentials/…
标签: sqlite xamarin filter mime-types filepicker