我在我的結尾嘗試過。首先,我轉換爲base64encoding這樣的:
NSString *str64;
if(Image){
NSData *imageData = UIImageJPEGRepresentation(Image,0.75);
str64 = [imageData base64Encoding];
}
然後我加入到字典,然後添加該字典到一個數組,這樣我可以把它作爲在請求的主體中的JSON字符串。
NSMutableArray * ParaArray = [[NSMutableArray alloc] init];
ASIFormDataRequest *request = [[ASIFormDataRequest alloc] initWithURL:[NSURL URLWithString:urlString]];
[request setPostValue:[ParaArray JSONRepresentation] forKey:@"bulk_data"];
//[ParaDictionary release];
[ParaArray release];
[request setTimeOutSeconds:20];
[request startSynchronous];
它的工作對我罰款:
NSDictionary *ParaDictionary=[NSDictionary dictionaryWithObjectsAndKeys:
[NSString stringWithFormat:@"%@",Userid], @"userid",
[NSString stringWithFormat:@"%@",[Imagename URLEncodedString]], @"imagename",
[NSString stringWithFormat:@"%@",DateNTime], @"datetime",
[NSString stringWithFormat:@"%@",ImageLocation], @"imagelocation",
str64,@"image",
nil]; // set the parameter
[ParaArray addObject:ParaDictionary];
有使用ASIFormDataRequest後,我用這個片段發送的圖像服務器。我希望它也能幫助你。
數據以字符串形式傳遞,我們可以直接使用base64Encoding方法拷貝粘貼它們。雖然你可能知道他們仍然在這裏:
- (NSString *) base64Encoding {
return [self base64EncodingWithLineLength:0];
}
- (NSString *) base64EncodingWithLineLength:(NSUInteger) lineLength {
const unsigned char *bytes = [self bytes];
NSMutableString *result = [NSMutableString stringWithCapacity:[self length]];
unsigned long ixtext = 0;
unsigned long lentext = [self length];
long ctremaining = 0;
unsigned char inbuf[3], outbuf[4];
unsigned short i = 0;
unsigned short charsonline = 0, ctcopy = 0;
unsigned long ix = 0;
while(YES) {
ctremaining = lentext - ixtext;
if(ctremaining <= 0) break;
for(i = 0; i < 3; i++) {
ix = ixtext + i;
if(ix < lentext) inbuf[i] = bytes[ix];
else inbuf [i] = 0;
}
outbuf [0] = (inbuf [0] & 0xFC) >> 2;
outbuf [1] = ((inbuf [0] & 0x03) << 4) | ((inbuf [1] & 0xF0) >> 4);
outbuf [2] = ((inbuf [1] & 0x0F) << 2) | ((inbuf [2] & 0xC0) >> 6);
outbuf [3] = inbuf [2] & 0x3F;
ctcopy = 4;
switch(ctremaining) {
case 1:
ctcopy = 2;
break;
case 2:
ctcopy = 3;
break;
}
for(i = 0; i < ctcopy; i++)
[result appendFormat:@"%c", encodingTable[outbuf[i]]];
for(i = ctcopy; i < 4; i++)
[result appendString:@"="];
ixtext += 3;
charsonline += 4;
if(lineLength > 0) {
if(charsonline >= lineLength) {
charsonline = 0;
[result appendString:@"\n"];
}
}
}
return [NSString stringWithString:result];
}
你是什麼意思的原始數據? ASIHTTPRequest的委託方法可以幫助您瞭解發生了什麼。 –
委託方法只告訴我們它將一個文件路徑添加到數組類型的對象中,然後進行異步調用以將數據發送到Web服務器,但它並沒有告訴我們它發送數據的確切時間,例如以何種格式或者在服務器上發送什麼類型的數據。 – Robin
在ASIHTTPRequestConfig.h中,將DEBUG_FORM_DATA_REQUEST設置爲1,它將調試數據記錄到控制檯。 – bbarnhart