سؤال

يعد تنفيذ تحميل ملف ضمن html أمرًا بسيطًا إلى حد ما، لكنني لاحظت للتو أن هناك سمة "قبول" يمكن إضافتها إلى <input type="file" ...> بطاقة شعار.

هل هذه السمة مفيدة كوسيلة للحد من تحميل الملفات على الصور، وما إلى ذلك؟ما هي أفضل طريقة لاستخدامه؟

وبدلاً من ذلك، هل هناك طريقة للحد من أنواع الملفات، ويفضل أن يكون ذلك في مربع حوار الملف، لعلامة إدخال ملف html؟

هل كانت مفيدة؟

المحلول

ال accept السمة مفيدة بشكل لا يصدق.إنها تلميح للمتصفحات لإظهار الملفات المسموح بها حاليًا فقط input.على الرغم من أنه يمكن للمستخدمين تجاوزه عادةً، إلا أنه يساعد في تضييق نطاق النتائج للمستخدمين افتراضيًا، حتى يتمكنوا من الحصول على ما يبحثون عنه بالضبط دون الحاجة إلى التدقيق في مئات أنواع الملفات المختلفة.

الاستخدام

ملحوظة: تمت كتابة هذه الأمثلة بناءً على المواصفات الحالية وقد لا تعمل فعليًا في جميع (أو أي) المتصفحات.قد تتغير المواصفات أيضًا في المستقبل، مما قد يؤدي إلى كسر هذه الأمثلة.

h1 { font-size: 1em; margin:1em 0; }
h1 ~ h1 { border-top: 1px solid #ccc; padding-top: 1em; }
<h1>Match all image files (image/*)</h1>
<p><label>image/* <input type="file" accept="image/*"></label></p>

<h1>Match all video files (video/*)</h1>
<p><label>video/* <input type="file" accept="video/*"></label></p>

<h1>Match all audio files (audio/*)</h1>
<p><label>audio/* <input type="file" accept="audio/*"></label></p>

<h1>Match all image files (image/*) and files with the extension ".someext"</h1>
<p><label>.someext,image/* <input type="file" accept=".someext,image/*"></label></p>

<h1>Match all image files (image/*) and video files (video/*)</h1>
<p><label>image/*,video/* <input type="file" accept="image/*,video/*"></label></p>

من مواصفات HTML (مصدر)

ال accept قد يتم تحديد السمة لتزويد وكلاء المستخدم ب تلميح لأنواع الملفات التي سيتم قبولها.

إذا تم تحديدها، يجب أن تتكون السمة من أ مجموعة من الرموز المفصولة بفواصل, يجب أن يكون كل منها ASCII حساس لحالة الأحرفتطابق لأحد ما يلي:

السلسلة audio/*

  • يشير إلى قبول الملفات الصوتية.

السلسلة video/*

  • يشير إلى قبول ملفات الفيديو.

السلسلة image/*

  • يشير إلى قبول ملفات الصور.

أ نوع MIME صالح بدون معلمات

  • يشير إلى قبول الملفات من النوع المحدد.

سلسلة حرفها الأول هو حرف U+002E FULL STOP (.)

  • يشير إلى قبول الملفات ذات امتداد الملف المحدد.

نصائح أخرى

نعم، إنه مفيد للغاية في المتصفحات التي تدعمه، ولكن "التقييد" هو بمثابة وسيلة راحة للمستخدمين (حتى لا يثقلوا بملفات غير ذات صلة) وليس كوسيلة لمنعهم من تحميل الأشياء التي لا تريدها تحميل.

يتم دعمه في

  • كروم 16+
  • سفاري 6+
  • فايرفوكس 9+
  • آي إي 10+
  • أوبرا 11+

هنا قائمة أنواع المحتوى يمكنك استخدامه معه، متبوعًا بامتدادات الملفات المقابلة (على الرغم من أنه يمكنك بالطبع استخدام أي امتداد للملف):

application/envoy   evy
application/fractals    fif
application/futuresplash    spl
application/hta hta
application/internet-property-stream    acx
application/mac-binhex40    hqx
application/msword  doc
application/msword  dot
application/octet-stream    *
application/octet-stream    bin
application/octet-stream    class
application/octet-stream    dms
application/octet-stream    exe
application/octet-stream    lha
application/octet-stream    lzh
application/oda oda
application/olescript   axs
application/pdf pdf
application/pics-rules  prf
application/pkcs10  p10
application/pkix-crl    crl
application/postscript  ai
application/postscript  eps
application/postscript  ps
application/rtf rtf
application/set-payment-initiation  setpay
application/set-registration-initiation setreg
application/vnd.ms-excel    xla
application/vnd.ms-excel    xlc
application/vnd.ms-excel    xlm
application/vnd.ms-excel    xls
application/vnd.ms-excel    xlt
application/vnd.ms-excel    xlw
application/vnd.ms-outlook  msg
application/vnd.ms-pkicertstore sst
application/vnd.ms-pkiseccat    cat
application/vnd.ms-pkistl   stl
application/vnd.ms-powerpoint   pot
application/vnd.ms-powerpoint   pps
application/vnd.ms-powerpoint   ppt
application/vnd.ms-project  mpp
application/vnd.ms-works    wcm
application/vnd.ms-works    wdb
application/vnd.ms-works    wks
application/vnd.ms-works    wps
application/winhlp  hlp
application/x-bcpio bcpio
application/x-cdf   cdf
application/x-compress  z
application/x-compressed    tgz
application/x-cpio  cpio
application/x-csh   csh
application/x-director  dcr
application/x-director  dir
application/x-director  dxr
application/x-dvi   dvi
application/x-gtar  gtar
application/x-gzip  gz
application/x-hdf   hdf
application/x-internet-signup   ins
application/x-internet-signup   isp
application/x-iphone    iii
application/x-javascript    js
application/x-latex latex
application/x-msaccess  mdb
application/x-mscardfile    crd
application/x-msclip    clp
application/x-msdownload    dll
application/x-msmediaview   m13
application/x-msmediaview   m14
application/x-msmediaview   mvb
application/x-msmetafile    wmf
application/x-msmoney   mny
application/x-mspublisher   pub
application/x-msschedule    scd
application/x-msterminal    trm
application/x-mswrite   wri
application/x-netcdf    cdf
application/x-netcdf    nc
application/x-perfmon   pma
application/x-perfmon   pmc
application/x-perfmon   pml
application/x-perfmon   pmr
application/x-perfmon   pmw
application/x-pkcs12    p12
application/x-pkcs12    pfx
application/x-pkcs7-certificates    p7b
application/x-pkcs7-certificates    spc
application/x-pkcs7-certreqresp p7r
application/x-pkcs7-mime    p7c
application/x-pkcs7-mime    p7m
application/x-pkcs7-signature   p7s
application/x-sh    sh
application/x-shar  shar
application/x-shockwave-flash   swf
application/x-stuffit   sit
application/x-sv4cpio   sv4cpio
application/x-sv4crc    sv4crc
application/x-tar   tar
application/x-tcl   tcl
application/x-tex   tex
application/x-texinfo   texi
application/x-texinfo   texinfo
application/x-troff roff
application/x-troff t
application/x-troff tr
application/x-troff-man man
application/x-troff-me  me
application/x-troff-ms  ms
application/x-ustar ustar
application/x-wais-source   src
application/x-x509-ca-cert  cer
application/x-x509-ca-cert  crt
application/x-x509-ca-cert  der
application/ynd.ms-pkipko   pko
application/zip zip
audio/basic au
audio/basic snd
audio/mid   mid
audio/mid   rmi
audio/mpeg  mp3
audio/x-aiff    aif
audio/x-aiff    aifc
audio/x-aiff    aiff
audio/x-mpegurl m3u
audio/x-pn-realaudio    ra
audio/x-pn-realaudio    ram
audio/x-wav wav
image/bmp   bmp
image/cis-cod   cod
image/gif   gif
image/ief   ief
image/jpeg  jpe
image/jpeg  jpeg
image/jpeg  jpg
image/pipeg jfif
image/svg+xml   svg
image/tiff  tif
image/tiff  tiff
image/x-cmu-raster  ras
image/x-cmx cmx
image/x-icon    ico
image/x-portable-anymap pnm
image/x-portable-bitmap pbm
image/x-portable-graymap    pgm
image/x-portable-pixmap ppm
image/x-rgb rgb
image/x-xbitmap xbm
image/x-xpixmap xpm
image/x-xwindowdump xwd
message/rfc822  mht
message/rfc822  mhtml
message/rfc822  nws
text/css    css
text/h323   323
text/html   htm
text/html   html
text/html   stm
text/iuls   uls
text/plain  bas
text/plain  c
text/plain  h
text/plain  txt
text/richtext   rtx
text/scriptlet  sct
text/tab-separated-values   tsv
text/webviewhtml    htt
text/x-component    htc
text/x-setext   etx
text/x-vcard    vcf
video/mpeg  mp2
video/mpeg  mpa
video/mpeg  mpe
video/mpeg  mpeg
video/mpeg  mpg
video/mpeg  mpv2
video/quicktime mov
video/quicktime qt
video/x-la-asf  lsf
video/x-la-asf  lsx
video/x-ms-asf  asf
video/x-ms-asf  asr
video/x-ms-asf  asx
video/x-msvideo avi
video/x-sgi-movie   movie
x-world/x-vrml  flr
x-world/x-vrml  vrml
x-world/x-vrml  wrl
x-world/x-vrml  wrz
x-world/x-vrml  xaf
x-world/x-vrml  xof

وتحمل السمة قدم في RFC 1867 ، تعتزم تمكين ملف من نوع تصفية تستند على نوع MIME لضبط ملف حدد. ولكن اعتبارا من عام 2008، معظم، إن لم يكن كلها، المتصفحات وعدم استخدام هذه السمة. استخدام البرامج النصية من جانب العميل، يمكنك جعل نوعا من التحقق من صحة تمديد مقرها، لتقديم بيانات من النوع الصحيح (التمديد).

وحلول أخرى لتحميل ملف متقدمة تتطلب أفلام فلاش مثل SWFUpload أو بريمجات جافا مثل <وأ href = "HTTP: //sourceforge.net/projects/jupload/ "يختلط =" noreferrer نوفولو "> JUpload .

في عام 2015 الطريقة الوحيدة لقد وجدت لجعله يعمل لكليهما كروم و ثعلب النار هو وضع جميع الإضافات الممكنة التي تريد دعمها، بما في ذلك المتغيرات:

accept=".jpeg, .jpg, .jpe, .jfif, .jif"

مشكلة مع فايرفوكس:باستخدام image/jpeg سوف يظهر نوع mime FireFox فقط .jpg ملفات غريبة جدا كما لو كانت شائعة .jpeg لم يكن بخير...

مهما فعلت، تأكد من تجربة الملفات التي تحتوي على العديد من الامتدادات المختلفة.ربما يعتمد الأمر على نظام التشغيل ...

أفترض accept غير حساس لحالة الأحرف، ولكن ربما لا يكون موجودًا في كل المتصفحات.

هنا هو مستندات MDN حول القبول:

تقبل إذا كانت قيمة سمة النوع هي ملف ، فستشير هذه السمة إلى أنواع الملفات التي يقبلها الخادم ، وإلا فإنها سيتم تجاهلها.يجب أن تكون القيمة قائمة مفصولة بفواصل فريدة محددات نوع المحتوى:

    A file extension starting with the STOP character (U+002E). (e.g. .jpg, .png, .doc).
    A valid MIME type with no extensions.
    audio/* representing sound files. HTML5
    video/* representing video files. HTML5
    image/* representing image files. HTML5

وكانت مدعومة من قبل كروم. انها ليست من المفترض أن تستخدم من أجل التحقق، ولكن لنوع دلالة على أن OS. إذا كان لديك سمة accept="image/jpeg" في ملف تحميل نظام التشغيل يمكن أن تظهر الملفات من نوع اقترح فقط.

ولقد كان بضع سنوات، والكروم على الأقل يجعل من استخدام هذه السمة. هذه السمة هي مفيدة جدا من وجهة نظر سهولة الاستخدام كما أنه سيتم تصفية الملفات غير الضرورية بالنسبة للمستخدم، مما يجعل تجربتهم أكثر سلاسة. ومع ذلك، يمكن للمستخدم أيضا تحديد "كل الملفات" من نوع (أو تجاوز خلاف مرشح)، وبالتالي يجب أن تحقق دائما الملف حيث يتم استخدامه في الواقع. إذا كنت تستخدم على الملقم، التحقق من صحة ذلك هناك قبل استخدامه. يمكن للمستخدم تجاوز دائما أي البرامج النصية من جانب العميل.

إذا يستخدم المستعرض هذه السمة، ما هي الا بمثابة مساعدة للمستخدم، لذلك فهو لن إيداع ملف متعددة ميغا بايت فقط لمعرفة انها رفضت من قبل الملقم ...
الشيء نفسه بالنسبة للبطاقة <input type="hidden" name="MAX_FILE_SIZE" value="100000">: إذا كان المتصفح يستخدم ذلك، انها لن ترسل الملف ولكن خطأ مما أدى إلى UPLOAD_ERR_FORM_SIZE (2) خطأ في PHP (غير متأكد كيف يتم التعامل معها في لغات أخرى)
ملاحظة هذه هي تساعد للمستخدم . بطبيعة الحال، فإن الملقم يجب دائما التحقق من نوع وحجم الملف على نهايته: فمن السهل أن العبث مع هذه القيم على جانب العميل

في عام 2008، لم يكن هذا مهمًا بسبب عدم وجود أنظمة تشغيل للهواتف المحمولة ولكنه أصبح الآن أمرًا مهمًا للغاية.

عند تعيين أنواع mime مقبولة، على سبيل المثال، يتم منح مستخدم Android مربع حوار نظام مع التطبيقات التي يمكن أن توفر له محتوى mime الذي يقبله إدخال الملف، وهو أمر رائع لأن التنقل عبر الملفات في مستكشف الملفات على الأجهزة المحمولة يكون بطيئًا ومرهقًا في كثير من الأحيان .

أحد الأشياء المهمة هو أن بعض متصفحات الجوال (استنادًا إلى إصدار Android من Chrome 36 وChrome Beta 37) لا تدعم تصفية التطبيقات عبر الإضافات (الإضافات) وأنواع mime المتعددة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top