Dans mon application iOS, je souhaite télécharger un fichier avec l'API Java à l'aide de NSMutableURLRequest
pour un fichier en plusieurs parties. voici la forme qui montre le paramètre.
<form action="API_URL" encType='multipart/form-data' method=post>
<input type=file name="files">
<input type=submit value="Upload Attempt Files">
EDIT formulaire2
<form action='URL' method="post" encType='multipart/form-data'>
<input name="key1" value='123'>
<input name="key2" value='asdf'>
<input name="key3" value='qwerty'>
<input name="key4" value='aaa'>
<input name="key5" value='aaa'>
<input name="key6" value='false'>
<input type="file" name="files">
<input type=submit value="Create Forum Posts">
</form>
Comment puis-je y parvenir.
ici cette Question montre comment télécharger un fichier multipart à l’aide de AFNetworking sur iOS (Objective C). Mais je ne comprends pas comment mettre un paramètre selon la forme que j'utilise.
S'il vous plaît aider et suggérer
En regardant votre code HTML, la name
de votre <input type=file>
est files
et vous utiliseriez donc @"files"
comme paramètre name
de la méthode appendPartWithFileData
. Par exemple, avec AFNetworking 3.x :
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager POST:urlString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData
name:@"files"
fileName:photoName mimeType:@"image/jpeg"];
[formData appendPartWithFormData:[key1 dataUsingEncoding:NSUTF8StringEncoding]
name:@"key1"];
[formData appendPartWithFormData:[key2 dataUsingEncoding:NSUTF8StringEncoding]
name:@"key2"];
// etc.
} progress:nil success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"Response: %@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"Error: %@", error);
}];
(Pour la syntaxe AFNetworking 1.x et 2.x, voir l'historique de révision de cette réponse.)
-(void) makePhotoUploadRequest{
NSArray *keys = [[NSArray alloc]initWithObjects:@"UserID", @"CompanyName" ,@"Location",@"Latitude",@"Longitude",@"Tagline",@"Goals",@"ColorName",nil];
NSArray *values =[[NSArray alloc]initWithObjects:@"103",@"queppelin",@"Jaiur",@"11.3" ,@"12.3",@"Let's do it",@"Let's do it",@"Let's do it", nil];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
NSURL *baseUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@%@/%@/RegisterCompanyUser",serverRequest,serverPort,serverName]];
NSString *charset = (NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
[request setURL:baseUrl];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"0xKhTmLbOuNdArY";
NSString *endBoundary = [NSString stringWithFormat:@"\r\n--%@\r\n", boundary];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; charset=%@; boundary=%@", charset, boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *tempPostData = [NSMutableData data];
[tempPostData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
for(int i=0;i<keys.count;i++){
NSString *str = values[i];
NSString *key =keys[i];
NSLog(@"Key Value pair: %@-%@",key,str);
[tempPostData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]];
[tempPostData appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];
// [tempPostData appendData:[@"\r\n--%@\r\n",boundary dataUsingEncoding:NSUTF8StringEncoding]];
[tempPostData appendData:[endBoundary dataUsingEncoding:NSUTF8StringEncoding]];
}
// Sample file to send as data
[tempPostData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"Image\"; filename=\"%@\"\r\n", @"company-logo.png"] dataUsingEncoding:NSUTF8StringEncoding]];
[tempPostData appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
UIImage *myImageObj = [UIImage imageNamed:@"company-logo.png"];
NSData *mydata= UIImagePNGRepresentation(myImageObj);
NSLog(@"Image data:%d",mydata.length);
[tempPostData appendData:mydata];
[tempPostData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:tempPostData];
NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
if( theConnection )
{
dataWebService = [NSMutableData data] ;
NSLog(@"request uploading successful");
}
else
{
NSLog(@"theConnection is NULL");
}
}
Vous pouvez utiliser le code suivant pour envoyer une image et n nombre de paramètres dans une demande multipart à l'aide de afnetworking 3.x
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // uncomment this line when the server is not returning JSON
[manager POST: urlString parameters: nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData
name:@"file"
fileName:imageName mimeType:@"image/jpeg"];
for (NSString *key in parameters) {
[formData appendPartWithFormData:[[[parameters objectForKey:key] description] dataUsingEncoding:NSUTF8StringEncoding] name:key];
}
// etc.
} progress:nil success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"Response: %@", responseObject);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"Error: %@", error);
}];