iOS文件上傳——獲取文件的MIMEType

今天和大家一起來討論一下在上傳文件之前如何獲取文件的MIMEType席函,有疏忽的地方,還望各位不吝賜教彰檬。


一盏触、啥是MIMEType

MIME (Multipurpose Internet Mail Extensions) 是描述消息內(nèi)容類型的因特網(wǎng)標(biāo)準(zhǔn),說白了也就是文件的媒體類型贮尉。瀏覽器可以根據(jù)它來區(qū)分文件拌滋,然后決定什么內(nèi)容用什么形式來顯示。

部分文件的MIMEType

/*
 * 文件拓展名           :  MIMEType
 * png                :  image/png
 * bmp\dib            :  image/bmp
 * jpg\jpeg\jpg       :  image/ipeg
 * gif                :  image/gif
 * mp3                :  audio/mpeg
 * mp4\mpg4\m4v\mp4v  :  video/mp4
 * js                 :  application/javascript
 * pdf                :  application/pdf
 * text\txt           :  text/plan
 * json               :  application/json
 * xml                :  text/xml
 */

二猜谚、為啥要獲取MIMEType

關(guān)于為什么要獲取MIMEType的原因败砂,是因?yàn)樵谶M(jìn)行文件上傳的時(shí)候,需要在POST請(qǐng)求體中傳遞相應(yīng)的參數(shù)魏铅,來進(jìn)行文件的上傳操作昌犹,關(guān)于文件的上傳會(huì)在稍后的文章里做詳細(xì)闡述。

說明:當(dāng)然你也可以直接傳遞application/octet-stream览芳,此參數(shù)表示通用的二進(jìn)制類型斜姥。

三、咋獲取MIMEType

1沧竟、借助百度就不說了铸敏,搜一搜就出來了,這里要說的是你可以向這個(gè)文件發(fā)個(gè)請(qǐng)求悟泵,來進(jìn)行獲取MIMEType的操作杈笔。

/*
 * 第一種方式獲得MIMEType
 * 說明:
 * 1、你可以將此方法寫成分類糕非,以便今后方便使用蒙具。
 * 2、這里請(qǐng)求的方式我采用的是NSURLConnection的方式發(fā)送的請(qǐng)求朽肥,大家可以采取其他的方式禁筏,在iOS7.0之后本方式已經(jīng)棄用了。
 * 參數(shù)解釋:
 * path : 文件的路徑衡招。
 */

- (void)getMimeType:(NSString *)path{
    // 創(chuàng)建URL 
    NSURL *url = [NSURL fileURLWithPath:path];
    // 創(chuàng)建請(qǐng)求對(duì)象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    // 發(fā)送異步請(qǐng)求 在請(qǐng)求的
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        NSLog(@"%@",response.MIMEType);
    }];
}

2篱昔、第二種方式是采用C語言庫的方式進(jìn)行獲取,在AFNetworing第三方框架里發(fā)現(xiàn)的蚁吝。

/* 
 * 第二種方式獲得MIMEType
 * 說明:
 * 1旱爆、這種方式使用了C語言的API進(jìn)行實(shí)現(xiàn)的舀射,要使用它窘茁,首先要引入入 <MobileCoreServices/MobileCoreServices.h>這個(gè)庫。
 * 2脆烟、相關(guān)的使用在AFURLRequestSerialization.m文件中山林,在此框架中采用的是內(nèi)聯(lián)函數(shù)的方式進(jìn)行描述的。關(guān)于內(nèi)聯(lián)函數(shù),讀者請(qǐng)先自行百度驼抹。
 * 參數(shù)解釋:
 * extension : 這個(gè)是文件的拓展名桑孩。
 */
// 方法實(shí)現(xiàn)
static inline NSString * AFContentTypeForPathExtension(NSString *extension) {
    NSString *UTI = (__bridge_transfer NSString *)UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)extension, NULL);
    NSString *contentType = (__bridge_transfer NSString *)UTTypeCopyPreferredTagWithClass((__bridge CFStringRef)UTI, kUTTagClassMIMEType);
    if (!contentType) {
        return @"application/octet-stream";
    } else {
        return contentType;
    }
}
// 方法調(diào)用 打印為 image/png
AFContentTypeForPathExtension(@"png");

-----------------------------------------------------------------華麗麗的分割線------------------------------------------------------------------

/*
 * 說明:
 * 1、知道了這個(gè)函數(shù)是如何使用的之后我們可以進(jìn)行相關(guān)改造框冀,使其更方便的使用流椒。
 * 2、這里傳入文件的路徑會(huì)自動(dòng)截取,并且添加了相關(guān)的過濾條件明也,這里的參數(shù)和方式一中的相同宣虾。
 */
// 方法實(shí)現(xiàn)
- (NSString *)mimeTypeForFileAtPath:(NSString *)path
{
    // 這里使用文件管理者的相關(guān)方法判斷文件路徑是否有后綴名
    if (![[[NSFileManager alloc] init] fileExistsAtPath:path]) {
        return nil;
    }
    // [path pathExtension] 獲得文件的后綴名 MIME類型字符串轉(zhuǎn)化為UTI字符串 
    CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)[path pathExtension], NULL);
    // UTI字符串轉(zhuǎn)化為后綴擴(kuò)展名
    CFStringRef MIMEType = UTTypeCopyPreferredTagWithClass (UTI, kUTTagClassMIMEType);
    CFRelease(UTI);
    // application/octet-stream,此參數(shù)表示通用的二進(jìn)制類型温数。
    if (!MIMEType) {
        return @"application/octet-stream";
    }
    return (__bridge NSString *)(MIMEType);
}
// 方法調(diào)用 打印為image/png
[self mimeTypeForFileAtPath:@"/Users/Desktop/icon.png"]

寫在最后的話:關(guān)于MIMEType的知識(shí)今天就分享到這里绣硝,關(guān)于MIMEType方面的問題歡迎大家和我交流,共同進(jìn)步撑刺,謝謝各位鹉胖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市够傍,隨后出現(xiàn)的幾起案子甫菠,更是在濱河造成了極大的恐慌,老刑警劉巖冕屯,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淑蔚,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡愕撰,警方通過查閱死者的電腦和手機(jī)刹衫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搞挣,“玉大人带迟,你說我怎么就攤上這事〈呀埃” “怎么了仓犬?”我有些...
    開封第一講書人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)舍肠。 經(jīng)常有香客問我搀继,道長(zhǎng),這世上最難降的妖魔是什么翠语? 我笑而不...
    開封第一講書人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任叽躯,我火速辦了婚禮,結(jié)果婚禮上肌括,老公的妹妹穿的比我還像新娘点骑。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開白布黑滴。 她就那樣靜靜地躺著憨募,像睡著了一般。 火紅的嫁衣襯著肌膚如雪袁辈。 梳的紋絲不亂的頭發(fā)上菜谣,一...
    開封第一講書人閱讀 52,184評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音晚缩,去河邊找鬼葛菇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛橡羞,可吹牛的內(nèi)容都是我干的眯停。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼卿泽,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼莺债!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起签夭,我...
    開封第一講書人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤齐邦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后第租,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體措拇,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年慎宾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丐吓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趟据,死狀恐怖券犁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汹碱,我是刑警寧澤粘衬,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站咳促,受9級(jí)特大地震影響稚新,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜跪腹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一褂删、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧尺迂,春花似錦笤妙、人聲如沸冒掌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至膳音,卻和暖如春召衔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背祭陷。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工苍凛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人兵志。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓醇蝴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親想罕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子悠栓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 11,004評(píng)論 6 13
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)按价,斷路器惭适,智...
    卡卡羅2017閱讀 134,695評(píng)論 18 139
  • 小文件下載如果文件比較小,下載方式會(huì)比較多直接用NSData的+ (id)dataWithContentsOfUR...
    醉葉惜秋閱讀 857評(píng)論 0 0
  • 1.在開發(fā)的時(shí)候可以創(chuàng)建一個(gè)工具類楼镐,繼承自我們的AFN中的請(qǐng)求管理者癞志,再控制器中真正發(fā)請(qǐng)求的代碼使用自己封裝的工具...
    紅樓那一場(chǎng)夢(mèng)閱讀 3,506評(píng)論 2 3
  • 218.241.181.202 wxhl60 123456 192.168.10.253 wxhl66 wxhl6...
    CYC666閱讀 1,391評(píng)論 0 6