قبل أن يحاول أحد تطبيقات العميل العمل مع ملف يحتوي على معرّف موارد منتظم (URI) للمحتوى له، يمكن للتطبيق طلب معلومات حول الملف من تطبيق الخادم، بما في ذلك نوع بيانات الملف حجم الملف. يساعد نوع البيانات تطبيق العميل في تحديد ما إذا كان يمكنه التعامل مع الملف تطبيق العميل في إعداد التخزين المؤقت والتخزين المؤقت للملف.
يوضح هذا الدرس كيفية الاستعلام عن عنوان URL الخاص بتطبيق الخادم
FileProvider
لاسترداد نوع MIME للملف وحجمه.
استرداد نوع MIME لملف
يشير نوع بيانات الملف إلى تطبيق العميل إلى الطريقة التي يجب أن يتعامل بها مع محتوى الملف. للحصول على
نوع بيانات ملف مشترك نظرًا لمعرف الموارد المنتظم (URI) الخاص به، ويطلب تطبيق العميل
ContentResolver.getType()
تُرجع هذه الطريقة
نوع MIME للملف. بشكل افتراضي،
يحدّد FileProvider
نوع MIME للملف من
كامتداد اسم الملف.
يوضح مقتطف الرمز التالي كيفية استرداد تطبيق العميل لنوع MIME لملف ما مرة واحدة. عرض تطبيق الخادم معرِّف الموارد المنتظم (URI) للمحتوى إلى العميل:
Kotlin
... /* * Get the file's content URI from the incoming Intent, then * get the file's MIME type */ val mimeType: String? = returnIntent.data?.let { returnUri -> contentResolver.getType(returnUri) } ...
Java
... /* * Get the file's content URI from the incoming Intent, then * get the file's MIME type */ Uri returnUri = returnIntent.getData(); String mimeType = getContentResolver().getType(returnUri); ...
استرداد اسم ملف وحجمه
لدى الفئة FileProvider
تنفيذ تلقائي
query()
التي تُرجع
اسم وحجم الملف المرتبط بمعرف موارد منتظم (URI) للمحتوى في
Cursor
تُرجع عملية التنفيذ الافتراضية عمودين:
DISPLAY_NAME
-
اسم الملف، بتنسيق
String
. هذه القيمة مماثلة للقيمة التي تم إرجاعها من قناة "File.getName()
" SIZE
-
حجم الملف بالبايت، كـ
long
. هذه القيمة هي نفس القيمة تم إرجاعه من قِبلFile.length()
يمكن لتطبيق العميل الحصول على كلّ من DISPLAY_NAME
وSIZE
لملف من خلال ضبط كل
وسيطات query()
null
باستثناء معرّف الموارد المنتظم (URI) للمحتوى. على سبيل المثال، يسترد مقتطف الرمز هذا الجزء
DISPLAY_NAME
و
SIZE
ويعرض كل عنصر على حدة
TextView
:
Kotlin
/* * Get the file's content URI from the incoming Intent, * then query the server app to get the file's display name * and size. */ returnIntent.data?.let { returnUri -> contentResolver.query(returnUri, null, null, null, null) }?.use { cursor -> /* * Get the column indexes of the data in the Cursor, * move to the first row in the Cursor, get the data, * and display it. */ val nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME) val sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE) cursor.moveToFirst() findViewById<TextView>(R.id.filename_text).text = cursor.getString(nameIndex) findViewById<TextView>(R.id.filesize_text).text = cursor.getLong(sizeIndex).toString() ... }
Java
... /* * Get the file's content URI from the incoming Intent, * then query the server app to get the file's display name * and size. */ Uri returnUri = returnIntent.getData(); Cursor returnCursor = getContentResolver().query(returnUri, null, null, null, null); /* * Get the column indexes of the data in the Cursor, * move to the first row in the Cursor, get the data, * and display it. */ int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE); returnCursor.moveToFirst(); TextView nameView = (TextView) findViewById(R.id.filename_text); TextView sizeView = (TextView) findViewById(R.id.filesize_text); nameView.setText(returnCursor.getString(nameIndex)); sizeView.setText(Long.toString(returnCursor.getLong(sizeIndex))); ...
لمزيد من المعلومات ذات الصلة، راجع: