iPHone 中用 NSURLRequest 实现文件上传

来源:互联网 发布:小米擦除数据 编辑:程序博客网 时间:2024/04/19 01:18

//

//  MainaerUploader.h

//  View Switcher

//

//  Created by dhanzhang on 10-7-6.

//  Copyright 2010 http://hi.csdn.net/dhz123. All rights reserved.

//

 

#import <Foundation/Foundation.h>

 

 

 

@interface MainaerUploader : NSObject  {

NSString  * serverUrl;

NSString  * userName;

NSString  * commentTitle;

NSString  * commentText;

NSData    * imageData ;

NSString  * commentId;

id  delegate;

SEL doneSelector;

    SEL errorSelector;

BOOL uploadDidSucceed; 

}

@property (nonatomic,retain) NSString * serverUrl;

@property (nonatomic,retain) NSString  * userName;

@property (nonatomic,retain) NSString  * commentTitle;

@property (nonatomic,retain) NSString  * commentText;

@property (nonatomic,retain) NSData    * imageData ;

@property (nonatomic,retain) NSString  * commentId;

 

 

-   (id)initWithUrlWithImageData: (NSString *)aServerUrl

  userName:(NSString*) uName

  commentTitle:(NSString*) title

commentText:(NSString*) msgText

  commentId:(NSString*) productId

  imageData:(NSData*) imgData

      delegate: (id)aDelegate

  doneSelector: (SEL)aDoneSelector

  errorSelector: (SEL)aErrorSelector  ;

 

 

 

 

 

@end

==============

//

//  MainaerUploader.m

//  View Switcher

//

//  Created by dhanzhang on 10-7-6.

//  Copyright 2010 http://hi.csdn.net/dhz123. All rights reserved.

//

 

#import "MainaerUploader.h"

#import "Log.h"

 

static NSString * const BOUNDRY        = @"--------------------------7d71a819230404";

 

@interface MainaerUploader (Private)

 

-(void)uploadSucceeded: (BOOL)success ;// IN

 

-(void)  upload ;

 

-(NSURLRequest *) createUrlRequest:(NSData *) imgData

  UserName:(NSString*) userName

  TextData:(NSString*) textData

  ProductName:(NSString*) nameData

ProductID:(NSString*) proId;

@end

 

@implementation MainaerUploader(Private)

 

-(void)uploadSucceeded: (BOOL)success

{

    [delegate performSelector:success ? doneSelector : errorSelector  withObject:self];

}

 

 

-(void)connectionDidFinishLoading:(NSURLConnection *)connection  {

    CMLog(@"connectionDidFinishLoading  %s: self:0x%p/n", __func__, self);

 

}

 

 

 

-(void)connection:(NSURLConnection *)connection    didFailWithError:(NSError *)error            {

    CMLog(@"didFailWithError %s: self:0x%p, connection error:%s/n", __func__, self, [[error description] UTF8String]);

[self uploadSucceeded:NO];

}

 

 

-(void)connection:(NSURLConnection *)connection  

    didReceiveResponse:(NSURLResponse *)response    {

    CMLog(@"didReceiveResponse %s: self:0x%p/n", __func__, self);

}

 

 

 

-(void)connection:(NSURLConnection *)connection     

didReceiveData:(NSData *)data              {

    NSLog(@"didReceiveData  %s: self:0x%p/n", __func__, self);

    NSString *reply  =[ [NSString alloc] initWithData:data

encoding:NSUTF8StringEncoding] ;

    CMLog(@"%s: data: %s/n", __func__, [reply UTF8String]);

    if ([reply hasPrefix:@"YES"]) {

[self uploadSucceeded:YES];

else {

[self   uploadSucceeded:NO];

 

}

 

[reply release];

}

 

 

//-----------END:  urlConnection Delegate --------

 

-(void) upload 

{

NSURLRequest  * urlRequest =[self createUrlRequest: [self imageData]

  UserName:  [self userName]

  TextData:  [self commentText]

  ProductName:  [self commentTitle]

ProductID:  [self commentId] ];

 

NSURLConnection * connection =[

  [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self] autorelease];

    if(!connection){

 

CMLog(@"CHUANG创建链接失败!");

}

}

 

-(NSURLRequest *) createUrlRequest:(NSData *) imgData

  UserName:(NSString*) nickName

  TextData:(NSString*) textData

  ProductName:(NSString*) nameData

ProductID:(NSString*) proId

{

NSURL  * url=[NSURL  URLWithString: [self serverUrl]];

NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];

    [urlRequest setHTTPMethod:@"POST"];

    [urlRequest setValue: [NSString stringWithFormat:@"multipart/form-data; boundary=%@", BOUNDRY]

      forHTTPHeaderField:@"Content-Type"];

   

int len=512;

if(imgData !=nil){

len = imgData.length + 512;

}

NSMutableData  * postData =[NSMutableData dataWithCapacity:len];

[postData  appendData: [[NSString  stringWithFormat:@"--%@/r/n",BOUNDRY] dataUsingEncoding:NSUTF8StringEncoding]];

[postData  appendData: [[NSString  stringWithFormat:@"Content-Disposition: form-data; name=/"%@/"/r/n/r/n",@"productName" ] dataUsingEncoding:NSUTF8StringEncoding]];

[postData  appendData: [[NSString  stringWithFormat:@"%@",nameData] dataUsingEncoding:NSUTF8StringEncoding]];

[postData  appendData: [[NSString  stringWithFormat:@"/r/n--%@/r/n",BOUNDRY] dataUsingEncoding:NSUTF8StringEncoding]];

[postData  appendData: [[NSString  stringWithFormat:@"Content-Disposition: form-data; name=/"%@/"/r/n/r/n",@"productMessage" ] dataUsingEncoding:NSUTF8StringEncoding]];

[postData  appendData:[[NSString   stringWithFormat:@"%@",textData] dataUsingEncoding:NSUTF8StringEncoding]];

[postData  appendData:[[NSString   stringWithFormat:@"/r/n--%@/r/n",BOUNDRY] dataUsingEncoding:NSUTF8StringEncoding]];

[postData  appendData: [[NSString  stringWithFormat:@"Content-Disposition: form-data; name=/"%@/"/r/n/r/n",@"productId" ] dataUsingEncoding:NSUTF8StringEncoding]];

[postData  appendData:[[NSString   stringWithFormat:@"%@",proId] dataUsingEncoding:NSUTF8StringEncoding]];

[postData  appendData:[[NSString   stringWithFormat:@"/r/n--%@/r/n",BOUNDRY] dataUsingEncoding:NSUTF8StringEncoding]];

[postData  appendData: [[NSString   stringWithFormat:@"Content-Disposition: form-data; name=/"%@/"/r/n/r/n",@"userName" ] dataUsingEncoding:NSUTF8StringEncoding]];

[postData  appendData: [[NSString   stringWithFormat:@"%@",nickName] dataUsingEncoding:NSUTF8StringEncoding]];

if (imgData != nil ) {

[postData  appendData:[[NSString   stringWithFormat:@"/r/n--%@/r/n",BOUNDRY] dataUsingEncoding:NSUTF8StringEncoding]];

[postData  appendData: [[NSString  stringWithFormat:@"Content-Disposition: form-data; name=/"%@/";filename=/"temp.png/"/r/nContent-Type: image/png/r/n/r/n",@"productImage" ] dataUsingEncoding:NSUTF8StringEncoding]];

[postData  appendData:imgData];

}   

//[postData  appendData:[@"Kkkk" dataUsingEncoding:NSUTF8StringEncoding]];

[postData  appendData:[[NSString stringWithFormat:@"/r/n--%@--/r/n",BOUNDRY] dataUsingEncoding:NSUTF8StringEncoding]];

    [urlRequest setHTTPBody:postData];

    return urlRequest;

 

}

 

@end

 

@implementation MainaerUploader

 

@synthesize  serverUrl;

@synthesize userName;

@synthesize commentTitle;

@synthesize commentText;

@synthesize imageData ;

@synthesize commentId;

 

 

-(id)initWithUrlWithImageData: (NSString *)aServerUrl

userName:(NSString*) uName

commentTitle:(NSString*) title

commentText:(NSString*) msgText

  commentId:(NSString*) productId

  imageData:(NSData*) imgData

delegate: (id)aDelegate

doneSelector: (SEL)aDoneSelector

  errorSelector: (SEL)aErrorSelector 

 

 

{

if(self==[super init]){

[self setServerUrl:aServerUrl];

         delegate  = [aDelegate retain];

        doneSelector = aDoneSelector;

        errorSelector = aErrorSelector;

[self setUserName:uName];

[self setCommentId:productId];

[self setCommentTitle:title];

[self setCommentText:msgText];

[self setImageData:imgData];

 

[self upload];

  

}

return self;

}

 

 

 

-(void)dealloc

{

    [delegate release];

     delegate = nil;

[userName release];

userName=nil;

[commentId release];

commentId=nil;

[commentText release];

commentText=nil;

[commentTitle release];

commentTitle=nil;

[serverUrl release];

serverUrl =nil;

[imageData release];

imageData=nil;

    doneSelector = NULL;

    errorSelector = NULL;

    [super dealloc];

}

@end

================使用方法============

MainaerUploader * upl= [[ MainaerUploader alloc]   initWithUrlWithImageData:urlPath

  userName:userName

  commentTitle:title

  commentText:msg

commentId:pid

imageData:imgData

  delegate:self

  doneSelector:@selector(onUploadDone:)

errorSelector:@selector(onUploadError:)] ;

[upl release];

 

-(void) onUploadDone:(MainaerUploader*) args

{

CMLog(@"发部消息成功!");

 

}

-(void) onUploadError :(MainaerUploader*) args

{

CMLog(@"发表消息失败!");

}

 

======================POST  的分隔符号 参加另外一片文章

 

http://blog.csdn.net/dhz123/archive/2007/06/06/1641150.aspx

 

大文件上传的HttpModule实现

 

http://www.flyblog.info/catprogramming/392.html 

 

iPhone SDK开发: 如何上传图片文件到服务器

 

原创粉丝点击