2015-06-27 26 views
1

我靠近終極我的應用程序,最後一步是實現一個功能,我需要將多個文件發送到一條消息。我也想模仿像pict一樣的郵件附件行爲。如何發送多個文件作爲多部分表單中的附件[HTTP POST請求]

我有實現這種 enter image description here

相反,用於發送多個文件I有一個問題:僅第一文件出現在接收到的消息;其他人都失去了。

所以請看看我的代碼,尤其是循環循環,可能出現的錯誤和/或建議。感謝您的時間。

- (IBAction)simple3:(id)sender{ 

NSLog(@"The document: %@", theDocument); 


NSString* url = [theDocument absoluteString]; 
NSLog(@"The document: %@", url); 


NSString* from = @"Excited Sundsx <[email protected]>"; 
NSString* to = @"[email protected]"; 
NSString* subject = @"Attach From Objective-c App"; 
NSString* text = @"Hello World"; 

//test 
NSImage *myImage = [[NSImage alloc]initWithContentsOfURL:theDocument]; 
if (myImage != nil) 
    { 
    NSLog(@"Image seem to be ok"); 
    }else 
    NSLog(@"Image seem to be wrong"); 

NSData *imageData; 
NSString *image_name; 
NSImage *image; 

//-- Convert string into URL 
NSMutableURLRequest *request =[NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://api.mailgun.net/v3/bbbbbbb.me/messages"]]; 
NSString *authStr = @"api:key-00000000000000000000"; 
NSData *authData = [authStr dataUsingEncoding:NSUTF8StringEncoding]; 

NSString *authValue = [NSString stringWithFormat: @"Basic %@",[authData base64EncodedStringWithOptions:0]]; 
[request setValue:authValue forHTTPHeaderField:@"Authorization"]; 

[request setHTTPMethod:@"POST"]; 

NSString *boundary = @"14737809831466499882746641449"; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
[request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

//-- Append data into posr url using following method 
NSMutableData *body = [NSMutableData data]; 

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",@"from"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"%@",from] dataUsingEncoding:NSUTF8StringEncoding]]; 

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",@"to"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"%@",to] dataUsingEncoding:NSUTF8StringEncoding]]; 

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",@"subject"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"%@",subject] dataUsingEncoding:NSUTF8StringEncoding]]; 

[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",@"text"] dataUsingEncoding:NSUTF8StringEncoding]]; 
[body appendData:[[NSString stringWithFormat:@"%@",text] dataUsingEncoding:NSUTF8StringEncoding]]; 


// here loop through mutableArray populated from openPal [openPanel URLs] 
lika as pict. 

NSLog(@"ARRAYCOUNT: %lu", (unsigned long)filesArrayPath.count); 
for (int y = 0; y < [filesArrayPath count]; y++) { 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    image_name = [filesArrayPath objectAtIndex:y]; 
    NSData *dataImg = [[NSData alloc]initWithContentsOfURL:[filesArrayPath objectAtIndex:y]]; 
    NSLog(@"added %i", y+1); 

    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"attachment\"; filename=\"%@\"\r\n",image_name] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[NSData dataWithData:dataImg]]; 
} 

[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

//-- Sending data into server through URL 
[request setHTTPBody:body]; 

//-- Getting response form server 
NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

//-- JSON Parsing with response data 
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:nil]; 
NSLog(@"Result = %@",result); 


} 

...用於做什麼的詳細信息,我附上代碼捲曲:

curl -s --user 'api:YOUR_API_KEY' \ 
https://api.mailgun.net/v3/YOUR_DOMAIN_NAME/messages \ 
-F from='Excited User <[email protected]_DOMAIN_NAME>' \ 
-F to='[email protected]' \ 
-F cc='[email protected]' \ 
-F bcc='[email protected]' \ 
-F subject='Hello' \ 
-F text='Testing some Mailgun awesomness!' \ 
--form-string html='<html>HTML version of the body</html>' \ 
-F [email protected]/cartman.jpg \ 
-F [email protected]/cartman.png 

回答

1

該死的累!我爲失去的時間表示歉意,但在發佈此幫助請求後兩分鐘,我找到了解決方案。解決方案:

for (int y = 0; y < [filesArrayPath count]; y++) { 
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    NSString *image_name = [filesArrayPath objectAtIndex:y]; 
    NSData *dataImg = [[NSData alloc]initWithContentsOfURL:[filesArrayPath objectAtIndex:y]]; 
    NSLog(@"added %i", y+1); 

    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"attachment\"; filename=\"%@\"\r\n",image_name] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[NSData dataWithData:dataImg]]; 
} 
相關問題