iOS開發 - 封裝檔案上傳工具類

來源:互聯網
上載者:User

標籤:檔案上傳   請求   參數   body   開發   

檔案上傳的步驟

1.佈建要求頭
* 目的:告訴伺服器請求體裡面的內容並非普通的參數,而是包含了檔案參數

[request setValue:@"multipart/form-data; boundary=maljob" forHTTPHeaderField:@"Content-Type"];

2.佈建要求體
* 作用:存放參數(檔案參數和非檔案參數)
1> 非檔案參數

[body appendData:MalJobEncode(@"--maljob\r\n")];[body appendData:MalJobEncode(@"Content-Disposition: form-data; name=\"username\"\r\n")];
[body appendData:MalJobEncode(@"\r\n")];[body appendData:MalJobEncode(@"張三")];[body appendData:MalJobEncode(@"\r\n")];

2> 檔案參數

[body appendData:MalJobEncode(@"--heima\r\n")];[body appendData:MalJobEncode(@"Content-Disposition: form-data; name=\"file\"; filename=\"test123.png\"\r\n")];[body appendData:MalJobEncode(@"Content-Type: image/png\r\n")];
[body appendData:MalJobEncode(@"\r\n")];[body appendData:imageData];[body appendData:MalJobEncode(@"\r\n")];

3> 結束標記 :參數結束的標記

[body appendData:MalJobEncode(@"--maljob--\r\n")];
檔案的MIMEType

1.百度搜尋

2.尋找伺服器下面的某個xml檔案

apache-tomcat-6.0.41\conf\web.xml

3.負載檔案時通過Reponse獲得

- (NSString *)MIMEType:(NSURL *)url{    // 1.建立一個請求    NSURLRequest *request = [NSURLRequest requestWithURL:url];    // 2.發送請求(返迴響應)    NSURLResponse *response = nil;    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];    // 3.獲得MIMEType    return response.MIMEType;}
檔案上傳封裝工具類
@interface UploadTool : NSObject/** *  根據檔案路徑擷取檔案的MIMEType * *  @param url 檔案路徑 * *  @return 檔案MIMEType */- (NSString *)MIMEType:(NSURL *)url;/** *  根據檔案名稱、MIMEType、二進位檔案、其他的參數上傳檔案 * *  @param filename 檔案名稱 *  @param mimeType MIMEType *  @param fileData 二進位檔案 *  @param params   非檔案的其他詳細參數 */- (void)upload:(NSString *)filename mimeType:(NSString *)mimeType fileData:(NSData *)fileData params:(NSDictionary *)params;@end
#define MJFileBoundary @"MalJob"#define MJNewLine @"\r\n"#define MJEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]#import "UploadTool.h"@implementation UploadTool- (NSString *)MIMEType:(NSURL *)url{    // 1.建立一個請求    NSURLRequest *request = [NSURLRequest requestWithURL:url];    // 2.發送請求(返迴響應)    NSURLResponse *response = nil;    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];    // 3.獲得MIMEType    return response.MIMEType;}- (void)upload:(NSString *)filename mimeType:(NSString *)mimeType fileData:(NSData *)fileData params:(NSDictionary *)params{    // 1.請求路徑    NSURL *url = [NSURL URLWithString:@"http://218.83.161.124:8080/job/upload"];    // 2.建立一個POST請求    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];    request.HTTPMethod = @"POST";    // 3.佈建要求體    NSMutableData *body = [NSMutableData data];    // 3.1.檔案參數    [body appendData:MJEncode(@"--")];    [body appendData:MJEncode(MJFileBoundary)];    [body appendData:MJEncode(MJNewLine)];    NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"", filename];    [body appendData:MJEncode(disposition)];    [body appendData:MJEncode(MJNewLine)];    NSString *type = [NSString stringWithFormat:@"Content-Type: %@", mimeType];    [body appendData:MJEncode(type)];    [body appendData:MJEncode(MJNewLine)];    [body appendData:MJEncode(MJNewLine)];    [body appendData:fileData];    [body appendData:MJEncode(MJNewLine)];    // 3.2.非檔案參數    [params enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {        [body appendData:MJEncode(@"--")];        [body appendData:MJEncode(MJFileBoundary)];        [body appendData:MJEncode(MJNewLine)];        NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"", key];        [body appendData:MJEncode(disposition)];        [body appendData:MJEncode(MJNewLine)];        [body appendData:MJEncode(MJNewLine)];        [body appendData:MJEncode([obj description])];        [body appendData:MJEncode(MJNewLine)];    }];    // 3.3.結束標記    [body appendData:MJEncode(@"--")];    [body appendData:MJEncode(MJFileBoundary)];    [body appendData:MJEncode(@"--")];    [body appendData:MJEncode(MJNewLine)];    request.HTTPBody = body;    // 4.佈建要求頭(告訴伺服器這次傳給你的是檔案資料,告訴伺服器現在發送的是一個檔案上傳請求)    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", MJFileBoundary];    [request setValue:contentType forHTTPHeaderField:@"Content-Type"];    // 5.發送請求    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {        NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];        MalJobLog(@"%@", dict);    }];}- (void)upload{    // 非檔案的其他詳細參數    NSDictionary *params = @{                             @"" : @"",                             @"" : @"",                             };    NSURL *url = [[NSBundle mainBundle] URLForResource:@"filename" withExtension:@"txt"];    NSData *data = [NSData dataWithContentsOfURL:url];    NSString *MIMEType = [self MIMEType:url];    [self upload:@"filename.txt" mimeType:MIMEType fileData:data params:params];}

iOS開發 - 封裝檔案上傳工具類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.