【问题标题】:Uploading Images using ios to php使用ios上传图片到php
【发布时间】:2016-04-16 23:24:13
【问题描述】:

我尝试从我的 Iphone 图库上传的图片都保存为ipodfile.jpg

我想要从图库中选择的确切图片名称 我想创建一个文件夹(使用登录用户名)并且我想存储在文件夹中

例如

  • 用户名:Mike
  • 图片:welcome.jpg

然后我想创建一个名为mike的文件夹并将图像保存在里面。

- (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");

}

这是我正在使用的服务器端代码

<?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;
    }
}

【问题讨论】:

  • 你的问题是php端你ios端告诉我?
  • 在 ios 代码中有一行 filename=\"ipodfile.jpg\" 如何更改我从图片库中选择的文件名
  • 你的图片默认保存 ipodfile.jpg ?

标签: php ios objective-c nsurlconnection


【解决方案1】:

您应该为每个图像使用唯一的文件名,例如时间戳,它始终是唯一的。

在下面的行中,您正在设置图像名称,因此请使用时间戳进行设置。

 [body appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"ipodfile.jpg\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

您可以保留我曾经使用过的类似这样的唯一名称,

            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"];

希望这会有所帮助;)

更新:

你可以像这样使用唯一的名字,

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

第二件事你应该使用AFNetworking 来做这种事情。它会管理所有这些东西,比如设置边界等。Click here for AFNetworking github

更新2(根据评论查询):

您应该使用NSURLSession 而不是nsurlconnection,因为现在不推荐使用连接,所以您的代码应该是这样的

 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];

【讨论】:

  • 如何实现下面一行中的uniquename代码 [body appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"ipodfile.jpg\" \r\n" dataUsingEncoding:NSUTF8StringEncoding]];
  • 谢谢它的工作以及这个 i 变量在这一行中代表什么 NSString *cleanedString2 = [cleanedString stringByAppendingFormat:@"%d",i];
  • 如果您觉得这很有帮助,请标记正确的答案并投票,以便其他有相同问题的人可以使用它。我想我已经在 for 循环中为多个图像编写了这段代码。所以每次标题都附加 0,1,2,3 一样明智。您可以评论此行并更新最后一行,例如 NSString *finalUniqueImageNAme = [cleanedString stringByAppendingString:@".jpg"];
  • 另一个疑问。上传成功后,我需要 php 的响应,所以我做了 echo“成功上传”如何获得该响应。
  • 我对 php 不太了解。但我可以告诉如何从 ios 中检索它。你从 php 返回什么?是指字符串还是json对象?
【解决方案2】:

改变路径

$path="mike/"; 然后上传图片。通过这种方式,您的图像将被上传到 mike 文件夹中。

    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];

【讨论】:

  • 我在 php 服务器中创建了一个文件夹 mike 并尝试过,但它存储在文件夹之外而不是 mike 文件夹内。
  • [body appendData:[[NSString stringWithString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"mike\"; filename=\"%@\"\r\ n", 1]] dataUsingEncoding:NSUTF8StringEncoding]];
  • 更改php端路径名
  • 不,我收到错误:EXE_BAD_ACCESS CODE=2 LIKE THAT
  • 在 PHP 中我也改成 MIKE
猜你喜欢
  • 1970-01-01
  • 2014-12-01
  • 2014-01-10
  • 2013-07-31
  • 2010-09-26
  • 2011-03-17
  • 1970-01-01
相关资源
最近更新 更多