iOS文件上传

iOS文件上传

在ios里来上传文件的方法很多,比如把文件base64直接post,本来打算这样做的,发现各种不爽,服务端收起来也各种不爽,所以干脆用标准的http上传协议mutipart来搞个上传就好,具体代码如下

头文件

?


1

2

3

4

5

6

7

8

9

10

11

@interface HttpRequest : NSObject 

  

+(id)upload:(NSString *)url widthParams:(NSDictionary *)params; 

  

@end 

  

@interface FileDetail : NSObject 

@property(strong,nonatomic) NSString *name; 

@property(strong,nonatomic) NSData *data; 

+(FileDetail *)fileWithName:(NSString *)name data:(NSData *)data; 

@end

main文件

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

// 

//  HttpRequest.m 

//  recofm 

// 

//  Created by reco on 13-12-25. 

//  Copyright (c) 2013年 reco. All rights reserved. 

// 

  

#import "HttpRequest.h" 

  

  

#define BOUNDARY @"----------cH2gL6ei4Ef1KM7cH2KM7ae0ei4gL6" 

  

@implementation HttpRequest 

  

+(id)upload:(NSString *)url widthParams:(NSDictionary *)params { 

      

    NSError *err = nil; 

    NSMutableURLRequest *myRequest = [ [NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:0]; 

    [myRequest setHTTPMethod:@"POST"]; 

    [myRequest setValue:[@"multipart/form-data; boundary=" stringByAppendingString:BOUNDARY] forHTTPHeaderField:@"Content-Type"]; 

      

    NSMutableData *body = [NSMutableData data]; 

      

    for(NSString *key in params) { 

        id content = [params objectForKey:key]; 

        if ([content isKindOfClass:[NSString class]] || [content isKindOfClass:[NSNumber class]]) { 

            NSString *param = [NSString stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n\r\n%@\r\n",BOUNDARY,key,content,nil]; 

            [body appendData:[param dataUsingEncoding:NSUTF8StringEncoding]]; 

              

        else if([content isKindOfClass:[FileDetail class]]) { 

              

            FileDetail *file = (FileDetail *)content; 

              

            NSString *param = [NSString stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\";filename=\"%@\"\r\nContent-Type: application/octet-stream\r\n\r\n",BOUNDARY,key,file.name,nil]; 

            [body appendData:[param dataUsingEncoding:NSUTF8StringEncoding]]; 

            [body appendData:file.data]; 

            [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

        

    

    NSString *endString = [NSString stringWithFormat:@"--%@--",BOUNDARY]; 

    [body appendData:[endString dataUsingEncoding:NSUTF8StringEncoding]]; 

    [myRequest setHTTPBody:body]; 

      

    NSData *returnData = [NSURLConnection sendSynchronousRequest:myRequest returningResponse:nil error:&err]; 

      

      

      

      

    id jsonObj = [NSJSONSerialization JSONObjectWithData:returnData options:noErr error:nil]; 

      

    return jsonObj; 

  

  

  

  

@end 

  

  

@implementation FileDetail 

+(FileDetail *)fileWithName:(NSString *)name data:(NSData *)data { 

    FileDetail *file = [[self alloc] init]; 

    file.name = name; 

    file.data = data; 

    return file; 

@end

使用方法


1

2

3

4

5

6

7

8

NSData *imageData = UIImageJPEGRepresentation(image,0.8); 

   FileDetail *file = [FileDetail fileWithName:@"avatar.jpg" data:imageData]; 

   NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: 

                           file,@"file"

                           @"upload",@"action"

                           nil nil]; 

   NSDictionary *result = [HttpRequest upload:@"http://upload.corp.reco.cn/uploadimage" widthParams:params]; 

   NSLog(@"%@",result);

时间: 2024-08-01 10:32:40

iOS文件上传的相关文章

ios 文件上传

ASIHTTPRequest 框架支持文件的上传: 文件的上传使用ASIFormDataRequest; NSString *s = @"文件传输"; NSURL *url = [NSURL URLWithString:@"http://localhost:8080/text"];//传输地址 ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; NSStringEncoding

ios 文件上传, post数据

一.文件下载 获取资源文件大小有两张方式 1. HTTP HEAD方法 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:kTimeout]; request.HTTPMethod = @"HEAD"; [NSURLConnection sendAsynchronousRequest:request queue:self.myQueue

ios 文件上传到SpringMVC

ios代码:-(void)sendImg:img:(UIImage *)image{ //请求地址    NSMutableString *url = [[NSMutableString alloc] init];    [url appendString:[UtilTool getHostURL]];    [url appendString:@"savePic"];        NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x&

h5 input file ajax实现文件上传

<input type="file" accept="image/*" height="0" class="file_input" id="file_input_ss_0" multiple>  文件域 遇到的几个BUG 已经解决 1 多选文件域,如果没有上传成功或已上传成功,再次点击文件域名选择图片时,会累积上次的文件. 例如 第一次上传1.jpg  第二次点击上传 2.jpg 第二次的上传结

IOS开发之文件上传

IOS开发之文件上传 在移动应用开发  文件形式上传是必不可少的,最近把IOS这块文件上传文件代码简单的整理一下,如果大家有需要安卓这边的代码,本人也可以分享给大家!QQ群:74432915  欢迎大家一起探讨 首先本demo采用网上开源框架 AFNetworking  源码:http://download.csdn.net/detail/wangliang198901/7809439 将整个框架导入IOS新建立的工程中 在FKAppDelegate.h声明 如下: #import <UIKit

ios网络学习------11 原生API文件上传之断点续传思路

#import "MainViewController.h" @interface MainViewController () @end @implementation MainViewController - (void)viewDidLoad { [super viewDidLoad]; //下载文件 [self download]; } -(void)download { //1. NSURL NSURL *url = [NSURL URLWithString:@"ht

【分享】兼容ie6-9和现代浏览器以及ios,android,pad等触屏设备的异步文件上传插件

核心代码 /** * 该插件用于兼容ie6-7-8-9及现代浏览器的异步上传文件. * 请注意,在ie6-7-8-9上面的原理是: * 新添加一个表单和一个iframe,然后每次选择都将file输入框复制到该表单上面,然后submit整个表单,这样就可以实现类似ajax提交文件的效果, * 但是有一点是没办法处理的,就是在客户端预览图片及判断文件大小.现代浏览器则可以. */ var AjaxFileInput=function(opts){ var settings={ container:"

【iOS】文件上传小记

iOS中用系统提供的API能实现能实现文件的上传与下载,分别有两种方式.NSURLConnection与NSURLSession. 其中NSURLConnection是使用很久的的一种方式,NSURLSession是新出来的一种方式. 一. POST方式上传 POST方式提交信息默认使用的是 : *Content-Type:  application/x-www-form-urlencoded. *输入中文时,post方式自动进行转义(苹果中自动). 国内的绝大多数网站都采用这种方式上传文件(支

IOS后台文件上传

public ModelAndView GetImage(HttpServletRequest request,   HttpServletResponse response) throws Exception {  Map<String, Object> maps = new HashMap<String, Object>(); try {   // 创建一个临时文件存放要上传的文件,第一个参数为上传文件大小,第二个参数为存放的临时目录   DiskFileItemFactory