简体   繁体   中英

iPhone image upload to URL; upload_tmp_dir empty

I know many people have been asking similar questions here but somehow I still don't get it working. To make it simpler I'm just trying to store a previously loaded UIImage in objectiveC (using C4 framework) like this:

-(void)setup {
    UIImage *myImage=[UIImage imageNamed:@"image.jpg"];

    NSData *imageData = UIImageJPEGRepresentation(myImage, 1.0);
    // setting up the URL to post to
    NSString *urlString = @"my full server address/imageupload.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=\"userfile\"; filename=\"dr.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]];
    // setting the body of the post to the reqeust
    [request setHTTPBody:body];

    // now lets make the connection to the web
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

    C4Log(@"returnString: %@", returnString);

}

And then my upload.php looks like this:

<?php
      $uploaddir = './'; //Uploading to same directory as PHP file
      $file = basename($_FILES['userfile']['name']);
      $uploadFile = $file;
      $randomNumber = rand(0, 99999); 

      $newName = $uploadDir . $uploadFile;

    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
   echo "Temp file uploaded. \r\n ";
    } else {
    echo "Temp file not uploaded. \r\n";
   }
   move_uploaded_file($_FILES['userfile']['tmp_name'], $newName);

         $postsize = ini_get('post_max_size'); 
         $canupload = ini_get('file_uploads');  
         $tempdir = ini_get('upload_tmp_dir'); 
         $maxsize = ini_get('upload_max_filesize');
         echo "http://mlab.taik.fi/UrbanAlphabets/{$file}" . "\r\nsize:" .  $_FILES['userfile']['size'] . "\r\ntype:" . $_FILES['userfile']['type']. "\r\npostsize:" . $postsize."\r\ncanupload:" . $canupload ."\r\ntempdir:" .$tempdir."\r\nmaxsize:".$maxsize;

?>

It looks as if 'upload_tmp_dir' is empty for some reason but I have no idea how to fix it... Here is the echo:

Temp file uploaded. 

 MY SERVER/dr.jpg

size:31476

type:application/octet-stream

postsize:100M

canupload:1

tempdir:

maxsize:100M

Any tipps?

Use the full path in your script to the upload directory, also only move the temp file WHEN a temp file is uploaded. Example:

<?php
      $uploaddir = '/Volumes/Web/mlab/mlabwww/UrbanAlphabets/'; //Uploading to same directory as PHP file
      $file = basename($_FILES['userfile']['name']);
      $uploadFile = $file;
      $randomNumber = rand(0, 99999); 

      $newName = $uploadDir . $uploadFile;

    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
         echo "Temp file uploaded. \r\n ";

         move_uploaded_file($_FILES['userfile']['tmp_name'], $newName);

         $postsize = ini_get('post_max_size'); 
         $canupload = ini_get('file_uploads');  
         $tempdir = ini_get('upload_tmp_dir'); 
         $maxsize = ini_get('upload_max_filesize');
         echo "http://mlab.taik.fi/UrbanAlphabets/{$file}" . "\r\nsize:" .  $_FILES['userfile']['size'] . "\r\ntype:" . $_FILES['userfile']['type']. "\r\npostsize:" . $postsize."\r\ncanupload:" . $canupload ."\r\ntempdir:" .$tempdir."\r\nmaxsize:".$maxsize;

    } else {
         echo "Temp file not uploaded. \r\n";
   }

?>

temp directory will always be empty after the script has finished it's execution. so you have to move your file within the script..

and don't look for file it temp directory because it won't be there look for it where you moved..

this will help http://us2.php.net/move_uploaded_file .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM