MIME টাইপ হল একটি প্রমিত ডেটা ফরম্যাট শনাক্তকারী যা iOS এ নেটওয়ার্ক, ফাইল সিস্টেম এবং আন্তঃপ্রক্রিয়া যোগাযোগের মাধ্যমে প্রেরণের সময় ফাইলের ধরন নির্ধারণ করতে ব্যবহৃত হয়। Apple ডেভেলপার ডকুমেন্টেশন, 2024 অনুসারে, MIME টাইপ (Multipurpose Internet Mail Extensions) ফাইলগুলিকে তাদের বিষয়বস্তু অনুসারে শ্রেণীবদ্ধ করে: image/jpeg, application/pdf, text/plain। iOS সিস্টেম ফাইল হ্যান্ডলিংয়ের জন্য UTType এর মাধ্যমে MIME কে UTI (ইউনিফর্ম টাইপ আইডেন্টিফায়ার) এ রূপান্তর করে।
মূল পয়েন্ট
MIME টাইপ (Multipurpose Internet Mail Extensions) হল একটি প্রমিত ডেটা ফরম্যাট শনাক্তকারী যা দুটি অংশ নিয়ে গঠিত: একটি প্রধান টাইপ (type) এবং একটি সাবটাইপ (subtype), স্ল্যাশ দ্বারা পৃথক। প্রধান বিভাগগুলি: text (টেক্সট), image (ছবি), audio (অডিও), video (ভিডিও), application (বাইনারি ডেটা), multipart (যৌগিক বার্তা)।
MIME মানটি মূলত ইমেল সংযুক্তির জন্য তৈরি করা হয়েছিল (RFC 2046, 1996), কিন্তু আজ এটি সর্বত্র ব্যবহৃত হয়: HTTP সার্ভার প্রতিক্রিয়ার Content-Type নির্দিষ্ট করে, ব্রাউজার নির্ধারণ করে কীভাবে ফাইল হ্যান্ডেল করতে হবে এবং মোবাইল অ্যাপ্লিকেশন শনাক্ত করে কোন ডেটা খোলা যেতে পারে। IANA (ইন্টারনেট অ্যাসাইনড নাম্বারস অথরিটি) নিবন্ধিত MIME টাইপের একটি রেজিস্ট্রি রক্ষণাবেক্ষণ করে।
IANA মিডিয়া টাইপ রেজিস্ট্রি (2024) অনুসারে, 1800 টিরও বেশি অফিসিয়াল MIME টাইপ নিবন্ধিত, এবং কাস্টম ও ভেন্ডর টাইপ সহ প্রকৃত সংখ্যা 5000 ছাড়িয়ে গেছে। iOS বেশিরভাগ স্ট্যান্ডার্ড টাইপ সমর্থন করে এবং ইউনিফর্ম টাইপ আইডেন্টিফায়ারের মাধ্যমে তাদের সাথে কাজ করার জন্য API প্রদান করে।
UTI (ইউনিফর্ম টাইপ আইডেন্টিফায়ার) হল iOS এবং macOS এর ভিতরে ব্যবহৃত কন্টেন্ট টাইপ শনাক্তকরণের Apple এর নিজস্ব সিস্টেম। MIME এর বিপরীতে, UTI একটি উত্তরাধিকার শ্রেণিবিন্যাস সমর্থন করে (উদাহরণস্বরূপ, public.image হল public.png এবং public.jpeg এর প্যারেন্ট) এবং এতে কেবল ফাইল ফরম্যাটই নয়, বিমূর্ত ডেটা টাইপও অন্তর্ভুক্ত।
| MIME টাইপ | UTI | এক্সটেনশন | বিবরণ |
|---|---|---|---|
| image/jpeg | public.jpeg | .jpg, .jpeg | JPEG ছবি |
| application/pdf | com.adobe.pdf | PDF ডকুমেন্ট | |
| text/plain | public.plain-text | .txt | টেক্সট ফাইল |
| application/json | public.json | .json | JSON ডেটা |
| video/mp4 | public.mpeg-4 | .mp4 | MP4 ভিডিও |
রূপান্তর iOS এ MIME এবং UTI এর মধ্যে UTType ক্লাস (iOS 14+) এর মাধ্যমে সম্পাদিত হয়। সিস্টেম একটি অভ্যন্তরীণ ম্যাপিং ডাটাবেস রক্ষণাবেক্ষণ করে যা বেশিরভাগ স্ট্যান্ডার্ড ফরম্যাট কভার করে। কাস্টম টাইপের জন্য, ডেভেলপার Info.plist এ ম্যাপিং নিবন্ধন করে।
import UniformTypeIdentifiers
let mimeType = "image/jpeg"
if let uti = UTType(mimeType: mimeType) {
print("UTI: \(uti.identifier)")
print("ছবির সাথে সামঞ্জস্যপূর্ণ: \(uti.conforms(to: .image))")
print("এক্সটেনশন: \(uti.preferredFilenameExtension ?? "")")
}
// বিপরীত রূপান্তর: UTI থেকে MIME
if let uti = UTType(filenameExtension: "pdf"),
let mime = uti.preferredMIMEType {
print("PDF এর জন্য MIME: \(mime)")
}
UTI শ্রেণিবিন্যাস একটি টাইপ নির্দিষ্ট বিভাগের সাথে সামঞ্জস্যপূর্ণ কিনা তা পরীক্ষা করার অনুমতি দেয়। উদাহরণস্বরূপ, সমস্ত ছবির টাইপ (JPEG, PNG, GIF) conform(to: .image) করে। এটি গ্রুপ ফিল্টারিং এবং একটি টাইপ সিস্টেম কম্পোনেন্ট দ্বারা হ্যান্ডেল করা যায় কিনা তা নির্ধারণের জন্য সুবিধাজনক।
গুরুত্বপূর্ণ পার্থক্য: MIME একটি সমতল শ্রেণীবিভাগ (কোনও উত্তরাধিকার নেই), যখন UTI একাধিক উত্তরাধিকার সমর্থন করে। উদাহরণস্বরূপ, public.html public.source-code এবং public.text উভয়ের সাথে সামঞ্জস্যপূর্ণ। এটি iOS এ ফাইল প্রক্রিয়াকরণের সময় আরও নমনীয় রাউটিং প্রদান করে।
তিনটি পদ্ধতি iOS এ MIME টাইপ নির্ধারণের জন্য উপলব্ধ: ফাইল এক্সটেনশন দ্বারা (দ্রুত কিন্তু অবিশ্বস্ত), ম্যাজিক বাইটের মাধ্যমে বিষয়বস্তু দ্বারা (বিশ্বস্ত কিন্তু ফাইল পড়ার প্রয়োজন), এবং HTTP Content-Type হেডার দ্বারা (শুধুমাত্র নেটওয়ার্ক অনুরোধের জন্য)।
import UniformTypeIdentifiers
enum MIMEDetector {
// এক্সটেনশন দ্বারা সনাক্ত করুন
static func fromExtension(_ ext: String) -> String? {
UTType(filenameExtension: ext)?.preferredMIMEType
}
// বিষয়বস্তু দ্বারা সনাক্ত করুন (ম্যাজিক বাইট)
static func fromFile(at url: URL) -> String? {
guard let handle = try? FileHandle(forReadingFrom: url) else {
return nil
}
defer { handle.closeFile() }
let header = handle.readData(ofLength: 12)
// PNG: 89 50 4E 47 0D 0A 1A 0A
// JPEG: FF D8 FF
// PDF: 25 50 44 46
// ZIP: 50 4B 03 04
if header.starts(with: [0x89, 0x50, 0x4E, 0x47]) {
return "image/png"
}
if header.starts(with: [0xFF, 0xD8, 0xFF]) {
return "image/jpeg"
}
if header.starts(with: [0x25, 0x50, 0x44, 0x46]) {
return "application/pdf"
}
return nil
}
}
এক্সটেনশন-ভিত্তিক সনাক্তকরণ UTType এর মাধ্যমে দ্রুততম পদ্ধতি, কিন্তু এটি অবিশ্বস্ত যদি এক্সটেনশন অনুপস্থিত বা জাল হয়। একজন আক্রমণকারী .exe এর নাম পরিবর্তন করে .jpg করতে পারে — সিস্টেম এটিকে image/jpeg হিসাবে চিহ্নিত করবে যদিও ফাইলটি এক্সিকিউটেবল। গুরুত্বপূর্ণ পরিস্থিতিতে (নিরাপত্তা, মেডিকেল ডেটা), সর্বদা বিষয়বস্তু-ভিত্তিক যাচাইকরণ ব্যবহার করুন।
ম্যাজিক বাইট হল ফাইলের প্রথম বাইট, প্রতিটি ফরম্যাটের জন্য অনন্য। বেশিরভাগ ফরম্যাটের 2–12 বাইটের একটি সিগনেচার থাকে। iOS বিষয়বস্তু দ্বারা কোনও বিল্ট-ইন MIME ডিটেক্টর প্রদান করে না — ডেভেলপার要么 নিজে একটি সিগনেচার টেবিল বাস্তবায়ন করে বা CocoaLumberjack এর মতো লাইব্রেরি বা হিউরিস্টিক-ভিত্তিক কাস্টম ডিটেক্টর ব্যবহার করে।
কাস্টম টাইপ প্রয়োজনীয় যখন একটি অ্যাপ্লিকেশন মালিকানাধীন ডেটা ফরম্যাট নিয়ে কাজ করে যা IANA বা Apple এ নিবন্ধিত নয়। Info.plist এ নিবন্ধন iOS কে এই জাতীয় ফাইলগুলি সঠিকভাবে হ্যান্ডেল করার অনুমতি দেয়: Files.app থেকে সেগুলি খোলা, আইকন প্রদর্শন করা এবং UIActivityViewController এর মাধ্যমে অন্যান্য অ্যাপ্লিকেশনে পাঠানো।
<key>CFBundleDocumentTypes</key>
<array>
<dict>
<key>CFBundleTypeName</key>
<string>MyApp Document</string>
<key>LSHandlerRank</key>
<string>Owner</string>
<key>LSItemContentTypes</key>
<array>
<string>com.myapp.secret-doc</string>
</array>
</dict>
</array>
<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeIdentifier</key>
<string>com.myapp.secret-doc</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array><string>sdoc</string></array>
<key>public.mime-type</key>
<array><string>application/vnd.myapp.secret-doc</string></array>
</dict>
</dict>
</array>
একটি কাস্টম টাইপ নিবন্ধন করতে, আপনাকে Info.plist এ উল্লেখ করতে হবে: UTI আইডেন্টিফায়ার (reverse-DNS ফরম্যাটে), প্যারেন্ট টাইপের সাথে সামঞ্জস্য, ফাইল এক্সটেনশন এবং MIME টাইপ। iOS ফাইল রাউটিংয়ের জন্য এই তথ্য ব্যবহার করে: যখন একজন ব্যবহারকারী একটি .sdoc ফাইল খোলে, সিস্টেম জানে যে এর মালিক আপনার অ্যাপ্লিকেশন।
UTExportedTypeDeclarations — আপনার অ্যাপ্লিকেশন দ্বারা সংজ্ঞায়িত টাইপের জন্য (রপ্তানি)। UTImportedTypeDeclarations — অন্যান্য অ্যাপ্লিকেশন দ্বারা তৈরি টাইপের জন্য যা আপনার অ্যাপ কাজ করতে পারে (আমদানি)। Apple সঠিক সিস্টেম ইন্টিগ্রেশনের জন্য আপনার অ্যাপ্লিকেশন যে সমস্ত কাস্টম টাইপ নিয়ে কাজ করে তা নিবন্ধন করার পরামর্শ দেয়।
অজানা MIME টাইপ iOS অ্যাপ্লিকেশনের জন্য নিরাপত্তা ঝুঁকি তৈরি করে। যদি একটি ফাইলের অজানা বা অযাচিত টাইপ থাকে, তবে অ্যাপ্লিকেশনটির সতর্কতা অবলম্বন করা উচিত: ফাইলটি স্বয়ংক্রিয়ভাবে খুলবেন না, ব্যবহারকারীকে সতর্কতা দেখান, বা প্রক্রিয়াকরণের আগে বিষয়বস্তু বিশ্লেষণ করুন।
প্রধান হুমকি: একটি জাল MIME টাইপযুক্ত ফাইলে দূষিত কোড বা পার্সার দুর্বলতার জন্য শোষণ থাকতে পারে। iOS স্যান্ডবক্সের মাধ্যমে সিস্টেমকে রক্ষা করে, কিন্তু অ্যাপ্লিকেশনটি ঝুঁকিপূর্ণ হতে পারে যদি এটি বিষয়বস্তু যাচাই না করে MIME টাইপকে বিশ্বাস করে। যদি ফাইলগুলি অবিশ্বস্ত উৎস থেকে আসে তবে সর্বদা ম্যাজিক বাইট দ্বারা পরীক্ষা করুন।
OWASP মোবাইল সিকিউরিটি গাইড, 2024 অনুসারে, অজানা টাইপের ফাইলগুলি হ্যান্ডেল করার জন্য নিম্নলিখিত অনুশীলনগুলি প্রযোজ্য: অবিশ্বস্ত উৎস থেকে application/octet-stream MIME টাইপের ফাইলগুলি প্রত্যাখ্যান করুন; প্রত্যাশিত বিভাগের সাথে সামঞ্জস্য পরীক্ষা করতে UTType ব্যবহার করুন; ব্যবহারকারীর নিশ্চিতকরণ ছাড়া বাহ্যিক অ্যাপ্লিকেশনে ফাইল খুলবেন না; নিরাপত্তা অডিটিংয়ের জন্য MIME এবং প্রকৃত বিষয়বস্তুর অমিলের সমস্ত ক্ষেত্রে লগ করুন।
কাস্টম MIME টাইপ Info.plist এ নিবন্ধন শুধুমাত্র কার্যকারিতা নয়, নিরাপত্তাও। যদি একটি অ্যাপ্লিকেশন সঠিকভাবে শুধুমাত্র নিজস্ব টাইপ নিবন্ধন করে, সিস্টেম ভুলবশত এটিতে অন্যান্য ফাইল পাঠাবে না। অন্যান্য অ্যাপ্লিকেশনের সাথে দ্বন্দ্ব এড়াতে সাধারণ উপসর্গের (application/x-format) পরিবর্তে নির্দিষ্ট ভেন্ডর উপসর্গ (application/vnd.company.app-format) ব্যবহার করুন।
সচরাচর জিজ্ঞাসিত প্রশ্ন
MIME টাইপ হল একটি মানক ডেটা ফরম্যাট শনাক্তকারী যা একটি টাইপ এবং সাবটাইপ নিয়ে গঠিত (যেমন, image/jpeg)। এটি HTTP সার্ভার, ব্রাউজার এবং অ্যাপ্লিকেশন দ্বারা একটি ফাইল কীভাবে হ্যান্ডেল করতে হবে তা নির্ধারণ করতে ব্যবহৃত হয়।
UTI (ইউনিফর্ম টাইপ আইডেন্টিফায়ার) হল উত্তরাধিকার শ্রেণিবিন্যাসের সমর্থন সহ কন্টেন্ট টাইপ শনাক্ত করার জন্য Apple এর সিস্টেম। MIME নেটওয়ার্কের জন্য একটি সমতল মান। iOS preferredMIMEType প্রপার্টির মাধ্যমে UTI এবং MIME এর মধ্যে রূপান্তরের জন্য UTType ব্যবহার করে।
তিনটি উপায়: এক্সটেনশন দ্বারা UTType(filenameExtension:) এর মাধ্যমে, বিষয়বস্তু দ্বারা ম্যাজিক বাইটের মাধ্যমে (ফাইলের প্রথম বাইট), HTTP হেডার দ্বারা Content-Type। নিরাপত্তার জন্য, শুধুমাত্র এক্সটেনশনের পরিবর্তে বিষয়বস্তু-ভিত্তিক যাচাইকরণ ব্যবহার করুন।
Info.plist এ UTExportedTypeDeclarations যোগ করুন: UTI আইডেন্টিফায়ার (com.company.format), ফাইল এক্সটেনশন, MIME টাইপ এবং প্যারেন্ট টাইপ উল্লেখ করুন। এই এক্সটেনশনের ফাইলগুলি স্বয়ংক্রিয়ভাবে আপনার অ্যাপ্লিকেশনের সাথে যুক্ত হবে।
অজানা MIME কে বিশ্বাস করবেন না। ম্যাজিক বাইট দ্বারা বিষয়বস্তু পরীক্ষা করুন, ব্যবহারকারীকে সতর্কতা দেখান এবং ফাইলটি স্বয়ংক্রিয়ভাবে খুলবেন না। application/octet-stream টাইপের ফাইলগুলির জন্য, প্রক্রিয়াকরণের আগে সর্বদা হিউরিস্টিক বিশ্লেষণ করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন