[英]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.