簡體   English   中英

在服務器上上傳多張圖片少一幅

[英]Uploading multiple images on server reaches one less

當我嘗試從陣列上傳多個圖像(例如3張圖像)時,在服務器上僅上傳2張。如果我上傳2張,則得到1張,如果是1張,則根本沒有圖像上傳。 我的代碼有什么問題?

_arrImage數組中,我可以得到正確數量的圖像。

這是目標c:

NSURL *url = [NSURL URLWithString:@"http://www.example.com/upload.php"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:5.0];
    [request setHTTPMethod:@"POST"];

    NSString *boundary = @"unique-consistent-string";

    // set Content-Type in HTTP header
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
    [request setValue:contentType forHTTPHeaderField: @"Content-Type"];
    NSMutableData *dataForm = [NSMutableData data];

    if([_arrImage count] > 0) {
        int i = 0;
        for (NSDictionary *imageDic in _arrImage) {
            UIImage *myimage = [imageDic objectForKey:@"mainImage"];
            NSData *imageData = UIImageJPEGRepresentation(myimage, 0.8);
            [dataForm appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
            [dataForm appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"fileToUpload[]\"; filename=\"%d.jpg\"\r\n",  i] dataUsingEncoding:NSUTF8StringEncoding]];
            [dataForm appendData:[[NSString stringWithFormat:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
            [dataForm appendData:[NSData dataWithData:imageData]];
            i++;
        }
    }

    [request setHTTPBody:dataForm];

    [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * data, NSURLResponse * response, NSError * error) {

        if(data.length > 0)
        {
            NSLog(@"response: %@", response);
        }else{
            NSLog(@"%@", [error localizedDescription]);
        }

    }] resume];

和PHP是:

<?php  
    $uploadFolder = "users/posts/";
    if (!file_exists($uploadFolder)) {
        mkdir($uploadFolder);
    }

    if (is_array($_FILES["fileToUpload"])) {
        $numberOfFiles = count($_FILES["fileToUpload"]["name"]);
        for ($i = 0; $i < $numberOfFiles; $i++) { 
            $uploadFile = $uploadFolder . "/" . basename($_FILES["fileToUpload"]["name"][$i]);
            $imageFileType = strtolower(pathinfo($uploadFile, PATHINFO_EXTENSION));

            if (!(getimagesize($_FILES["fileToUpload"]["tmp_name"][$i]) !== false)) {
                echo "Sorry, your image is invalid";
                exit;
            }

            if ($_FILES["fileToUpload"]["size"][$i] > 10000000) {
                echo "Sorry, your file is too large.";
                exit;
            }

            if ($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") {
                echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
                exit;
            }

            if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"][$i], $uploadFile)) {
                echo "Upload image ".basename($_FILES["fileToUpload"]["name"][$i])." successfully!";
            } else {
                echo "Sorry, there was an error uploading your file.";
            }
        }
    }
?>

因此,您可以幫助解決問題。

如果上傳2張圖片,這是$ _FILES的輸出:

$_FILES = array (
  'fileToUpload' => 
  array (
    'name' => 
    array (
      0 => '0.jpg',
      1 => '1.jpg',
    ),
    'type' => 
    array (
      0 => 'image/jpeg',
      1 => '',
    ),
    'tmp_name' => 
    array (
      0 => '/tmp/phpknUF0r',
      1 => '',
    ),
    'error' => 
    array (
      0 => 0,
      1 => 3,
    ),
    'size' => 
    array (
      0 => 39270,
      1 => 0,
    ),
  ),
);

在您的Objective-C代碼中添加

        [dataForm appendData:[NSData dataWithData:imageData]];
        i++;
    }

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

}

在for循環之后。 它將關閉傳輸的表格數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM