Swift-загрузка нескольких изображений на сервер

Я пытался загрузить несколько изображений на сервер в быстром.
Это мой код:

Swift:

 var images: Int16 = 0
var params: NSMutableDictionary = NSMutableDictionary()
var imageDataArray = [UIImage]()

func syncFile() {
let myUrl = NSURL(string: "http://localhost/app/imageUpload.php")

let request = NSMutableURLRequest(URL: myUrl!)
request.HTTPMethod = "POST"
let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
let authToken = prefs.valueForKey("authToken") as! String

let boundary = generateBoundaryString()request.addValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
switch images {
case 0:
imageDataArray = []
case 1:
imageDataArray.append(self.imageView1.image!)
case 2:
imageDataArray.append(self.imageView1.image!)
imageDataArray.append(self.imageView2.image!)
case 3:
imageDataArray.append(self.imageView1.image!)
imageDataArray.append(self.imageView2.image!)
imageDataArray.append(self.imageView3.image!)
default:
break
}params = [
"auth_code"   :  "\(authToken)",
"id"          :  "\(idParam)",
"file"        :  imageDataArray
]
request.HTTPBody = createBodyWithParameters(params, filePathKey: "file", boundary: boundary)

func createBodyWithParameters(parameters: NSMutableDictionary?, filePathKey: String?, boundary: String) -> NSData {

let body = NSMutableData()

if parameters != nil {
for (key, value) in parameters! {

if(value is String || value is NSString){
body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
body.appendString("\(value)\r\n")
}
else if(value is [UIImage]){
var i = 0
for image in value as! [UIImage] {
let filename = "image\(i).png"let data = UIImagePNGRepresentation(image)

let mimetype = mimeTypeForPath(filename)

let fileKey = "file"
body.appendString("--\(boundary)\r\n")
body.appendString("Content-Disposition: form-data; name=\"\(fileKey)\"; filename=\"\(filename)\"\r\n")
body.appendString("Content-Type: \(mimetype)\r\n\r\n")
body.appendData(data!)
body.appendString("\r\n")
i = i + 1
}
}
}
}
body.appendString("--\(boundary)--\r\n")

return body
}

func generateBoundaryString() -> String
{
return "Boundary-\(NSUUID().UUIDString)"}

func mimeTypeForPath(path: String) -> String {

let pathUrl = NSURL(string: path)

let pathExtension = pathUrl!.pathExtension
var stringMimeType = "application/octet-stream"if let uti = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, pathExtension!, nil)?.takeRetainedValue() {
if let mimetype = UTTypeCopyPreferredTagWithClass(uti, kUTTagClassMIMEType)?.takeRetainedValue() {
stringMimeType = mimetype as NSString as String
}
}
return stringMimeType;
}

И вот мой код PHP:

<?php
header('Content-type: application/json');
$target_dir = "uploads";

if(!file_exists($target_dir))
{
mkdir($target_dir, 0777, true);
}
$total = count($_FILES["file"]["name"]);
for($i=0; $i < $total; $i++){

$target_dir1 = $target_dir . "/" . basename($_FILES["file"]["name"][$i]);

if (move_uploaded_file($_FILES["file"]["tmp_name"][$i], $target_dir1))
{
echo json_encode([
"Message" => "The file ". basename( $_FILES["file"]["name"][$i]). " has been uploaded.",
"Status" => "OK"]);

} else {

echo json_encode([
"Message" => "Sorry, there was an error uploading your file.",
"Status" => "Error"]);

}}
?>

Но когда я распечатываю данные ответа, я получаю сообщение об ошибке: {«Сообщение»: «Извините, при загрузке файла произошла ошибка.», «Статус»: «Ошибка»}

Однако, если я удаляю цикл из кода php и загружаю только 1 изображение с таким же быстрым кодом, оно успешно загружает это изображение.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]