Reputation: 986
The images I try to upload from my Iphone gallery are all saved as ipodfile.jpg
I want the exact image name which I am selecting from the gallery and I want to create a folder (with the login username) and I want to store inside the folder
For example
Then I want to create a folder named mike
and save the image inside.
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
[self dismissModalViewControllerAnimated:true];
img = [info valueForKey:UIImagePickerControllerOriginalImage];
//images.image = img;
NSData *imageData = UIImageJPEGRepresentation(img, 90);
NSString *urlString = @"http://192.168.1.92/Abdul/IOS/Chat/upload_file.php";
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------------------14737809831466499882746641449"
;
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"ipodfile.jpg\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"Successfully uploaded");
}
This is the server-side code I'm using
<?php
$oname=$_FILES["file"]["name"];
$tempname=$_FILES["file"]["tmp_name"];
$path="upload";
echo "Upload: " . $oname . "<br />";
echo "Temp file: " . $tempname . "<br />";
echo "<br>";
$ex=file_exists("upload/$oname");
if($ex)
{
echo "File Already exist";
}
else
{
$upload=move_uploaded_file($tempname,$path.$oname);
if($upload)
{
echo "Sucessfully Stored in: " . $path. $oname;
}
else
{
echo "Not stored Sucessfully : " . $path.$oname;
}
}
Upvotes: 1
Views: 1457
Reputation: 27428
You should take unique file name for every image like timestamp which will always be unique.
in below line you are setting image name so set it with time stamp.
[body appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"ipodfile.jpg\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
You can kepp unique name aomething like this which i have used once,
NSDate *currentDate = [[NSDate alloc] init];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"];
NSString *localDateString = [dateFormatter stringFromDate:currentDate];
NSString* cleanedString = [[localDateString stringByReplacingOccurrencesOfString:@"." withString:@""]stringByReplacingOccurrencesOfString:@":" withString:@""];
NSString *cleanedString2 = [cleanedString stringByAppendingFormat:@"%d",i];
NSString *finalUniqueImageNAme = [cleanedString2 stringByAppendingString:@".jpg"];
Hope this will help ;)
Update :
you can use unique name like this,
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"\r\n",finalUniqueImageNAme] dataUsingEncoding:NSUTF8StringEncoding]];
And second thing you should use AFNetworking
to do this kind of stuff. it'll manage all this kind of stuff like set boundary etc. Click here for AFNetworking github
Update 2 (according to query of comment):
You should use NSURLSession
instead of nsurlconnection
because connection is deprecated now so your code should be like this
NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (data) {
//if response is in string format
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
//if response in json format then
id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
}
}]resume];
Upvotes: 1
Reputation: 1821
changes the path to
$path="mike/";
and then upload image. By this way your image will be uploaded in mike folder.
NSData *imageData = UIImagePNGRepresentation(yourImage);
NSString *urlString = [ NSString stringWithFormat:@"http://192.168.1.92/Abdul/IOS/Chat/upload_file.php"];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[[body appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"%@\"\r\n",img] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
Upvotes: 0