私はクライアントサーバーアプリケーションを開発しています。 1つの画像をアップロードする方法をいくつかチュートリアルで見つけました。しかし、単一のリクエストを使用して複数の画像をアップロードするにはどうすればよいでしょうか?私はWebプログラミングでは新しいので、一般的な方法はありません。iOSでHTTPリクエストで複数の画像をアップロードするには?
助けてください。
私はクライアントサーバーアプリケーションを開発しています。 1つの画像をアップロードする方法をいくつかチュートリアルで見つけました。しかし、単一のリクエストを使用して複数の画像をアップロードするにはどうすればよいでしょうか?私はWebプログラミングでは新しいので、一般的な方法はありません。iOSでHTTPリクエストで複数の画像をアップロードするには?
助けてください。
ASIHTTPRequestライブラリを使用する必要があります。
次に、独自のクラスを作成して、必要なすべてのリクエストを管理します。これは私のものです:
#import "ASIFormDataRequest.h"
@interface PostRequest : NSObject {
id localCopy; // to avoid exec_bad_access with arc
ASIHTTPRequest *getRequest;
ASIFormDataRequest *postRequest;
}
@property (nonatomic, retain) id delegate;
@property (nonatomic, readwrite) SEL callback;
@property (nonatomic, readwrite) SEL errorCallback;
- (void)performGetRequestWithString:(NSString *)string stringDictionary:(NSDictionary *)stringDictionary delegate:(id)requestDelegate requestSelector:(SEL)requestSelector errorSelector:(SEL)errorSelector;
- (void)performPostRequestWithString:(NSString *)string stringDictionary:(NSDictionary *)stringDictionary dataDictionary:(NSDictionary *)dataDictionary delegate:(id)requestDelegate requestSelector:(SEL)requestSelector errorSelector:(SEL)errorSelector;
@end
//
#import "PostRequest.h"
@implementation PostRequest
@synthesize delegate;
@synthesize callback, errorCallback;
- (void)performGetRequestWithString:(NSString *)string stringDictionary:(NSDictionary *)stringDictionary delegate:(id)requestDelegate requestSelector:(SEL)requestSelector errorSelector:(SEL)errorSelector {
localCopy = self;
self.delegate = requestDelegate;
self.callback = requestSelector;
self.errorCallback = errorSelector;
NSMutableString *requestStringData = [[NSMutableString alloc] init];
if (stringDictionary)
for (NSString *key in [stringDictionary allKeys])
[requestStringData appendFormat:@"%@=%@&", key, [stringDictionary objectForKey:key]];
NSString *resultString = [requestStringData substringToIndex:[requestStringData length]-1];
getRequest = [[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@?%@", string, [resultString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]];
[getRequest setDelegate:self];
[getRequest setRequestMethod:@"GET"];
//NSLog(@"request url = %@", [getRequest.url absoluteString]);
[getRequest startAsynchronous];
}
- (void)performPostRequestWithString:(NSString *)string stringDictionary:(NSDictionary *)stringDictionary dataDictionary:(NSDictionary *)dataDictionary delegate:(id)requestDelegate requestSelector:(SEL)requestSelector errorSelector:(SEL)errorSelector {
localCopy = self;
self.delegate = requestDelegate;
self.callback = requestSelector;
self.errorCallback = errorSelector;
NSURL *url = [NSURL URLWithString:string];
postRequest = [[ASIFormDataRequest alloc] initWithURL:url];
[postRequest setDelegate:self];
[postRequest setRequestMethod:@"POST"];
if (stringDictionary)
for (NSString *key in [stringDictionary allKeys])
[postRequest setPostValue:[stringDictionary objectForKey:key] forKey:key];
if (dataDictionary)
for (NSString *key in [dataDictionary allKeys])
[postRequest setData:[dataDictionary objectForKey:key] forKey:key];
//NSLog(@"request url = %@", [postRequest.url absoluteString]);
[postRequest startAsynchronous];
}
#pragma mark - ASIHTTPRequest Delegate Implementation
- (void)requestFinished:(ASIHTTPRequest *)crequest {
NSString *status = [crequest responseString];
if (self.delegate && self.callback) {
if([self.delegate respondsToSelector:self.callback])
[self.delegate performSelectorOnMainThread:self.callback withObject:status waitUntilDone:YES];
else
NSLog(@"No response from delegate");
}
localCopy = nil;
}
- (void)requestFailed:(ASIHTTPRequest *)crequest {
if (self.delegate && self.errorCallback) {
if([self.delegate respondsToSelector:self.errorCallback])
[self.delegate performSelectorOnMainThread:self.errorCallback withObject:crequest.error waitUntilDone:YES];
else
NSLog(@"No response from delegate");
}
localCopy = nil;
}
@end
それを使用するには、ちょうどあなたのUIViewController
でPostRequest.h
をインポートし、同様になめらかん:
[requestManager performGetRequestWithString:tempString stringDictionary:stringDictionary dataDictionary:dataDictionary delegate:self requestSelector:@selector(requestSucceeded:) errorSelector:@selector(requestFailed:)];
パラメータ:
(NSString *)string
- url striあなたのリクエストを投稿する場所。(NSDictionary *)stringDictionary
- すべてのテキスト情報(名前、IDなど)を含む辞書。(NSDictionary *)dataDictionary
- すべてのデータ情報(写真、ファイルなど)を含む辞書。(id)requestDelegate
- 以下のセレクタを実行する代理人。(SEL)requestSelector
- 正常に要求されている間に実行されるセレクタ。(SEL)errorSelector
- エラーが発生している間に実行されるセレクタ。私が使用して示唆しているいずれかASIHTTPRequestまたはAFNetworking
の両方が使用できるネットワークキューを持っています。 ASIHTTPは開発中ではありませんので、開発中のライブラリを使用したい場合はAFNetworkingをご覧ください。
魔法のように動作します!)ありがとう! – Lloyd18