使用Alamofire从iOS上传PHP [英] PHP upload from iOS using Alamofire

查看:71
本文介绍了使用Alamofire从iOS上传PHP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将3张图片从iOS上传到服务器到我的PHP服务。
由于某种原因,该文件夹在发布后仍然为空,但是其余数据通过并保存到mysql中。

I'm trying to upload 3 images to the server from iOS to my PHP service. For some reason the folder remains empty after posting, but the rest of the data goes through and gets persisted into mysql.

我的iOS代码:

Alamofire.upload(.POST, urlString, multipartFormData: {
            multipartFormData in

            if (firstPhoto != nil) {
                if  let firstImageData = UIImageJPEGRepresentation(firstImage!, 0.6) {
                    print("uploading image");
                    multipartFormData.appendBodyPart(data: firstImageData, name: "firstImage", fileName: "firstImage.png", mimeType: "image/png")
                }
            }

            if (secondPhoto != nil) {
                if  let secondImageData = UIImageJPEGRepresentation(secondImage!, 0.6) {
                    print("uploading image");
                    multipartFormData.appendBodyPart(data: secondImageData, name: "secondImage", fileName: "secondImage.png", mimeType: "image/png")
                }
            }

            if (thirdPhoto != nil) {
                if  let thirdImageData = UIImageJPEGRepresentation(thirdImage!, 0.6) {
                    print("uploading image");
                    multipartFormData.appendBodyPart(data: thirdImageData, name: "thirdImage", fileName: "thirdImage.png", mimeType: "image/png")
                }
            }


            if  let imageData = UIImageJPEGRepresentation(firstImage!, 0.6) {
                print("uploading image");
                multipartFormData.appendBodyPart(data: imageData, name: "image", fileName: "file.png", mimeType: "image/png")
            }

            if  let imageData = UIImageJPEGRepresentation(firstImage!, 0.6) {
                print("uploading image");
                multipartFormData.appendBodyPart(data: imageData, name: "image", fileName: "file.png", mimeType: "image/png")
            }


            for (key, value) in parameters {
                multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
            }

            }, encodingCompletion: {
                encodingResult in

                switch encodingResult {
                case .Success(let upload, _, _):
                    print("Запрос отправлен")
                    upload.responseJSON { response in
                        print(response.request)  // original URL request
                        print(response.response) // URL response
                        print(response.data)     // server data
                        print(response.result)   // result of response serialization

                        if let JSON = response.result.value {
                            print("JSON: \(JSON)")
                        }
                        completion(response.result.value)
                    }

                case .Failure(let encodingError):
                    print(encodingError)
                    completion(nil)
                }
        })

}

在我的PHP上,我不确定是否在此遗漏任何东西:

On my PHP I'm not sure if I'm missing anything here:

 <?php

require_once 'Functions/common_functions.php';
require_once 'Functions/engine.php';
require_once 'Functions/json.php';
require_once 'Functions/check_token.php';

if (count($_REQUEST) == 6) {
    foreach($_REQUEST as $k => $v) {
        if (strlen($k) > 0 && strlen($v) > 0) {
            $_REQUEST[$mysqli->real_escape_string($k)] = $mysqli->real_escape_string($v);
        } else {
            die(errorJSON("Empty parameter", "666"));
        }
    }

    $userID = checkAccessToken($_REQUEST['access_token'], $mysqli);

    if ($userID == 0) {
        die(errorJSON("Incorrect access token", "666"));
    }

    $mysqli->query('INSERT INTO Book (title, authorID, detail, price, categoryID, conditionText) VALUES ("'.$_REQUEST['title'].'", "'.$userID.'", "'.$_REQUEST['detail'].'", "'.$_REQUEST['price'].'", "'.$_REQUEST['categoryID'].'", "'.$_REQUEST['condition'].'")');

    $insertID = $mysqli->insert_id;

    if ($insertID > 0) {
        savePhotos($mysqli, $insertID);
        $message = book($insertID, $userID, $mysqli);
        die(successJSON($message));
    } else {
        die(errorJSON("Failed insert book in database", "666"));
    }
} else {
    die(errorJSON("Incorrect count of parameter" .  count($REQUEST) . count($_POST), "666"));
}

function savePhotos($mysqli, $bookID) {
    if(!is_dir('/home/thebakpa/resources/book_photos/')) {
        mkdir('/home/thebakpa/resources/book_photos/', 0777, true);
    }
    try {
        $uploaddir = '/home/thebakpa/resources/book_photos/';
        $file = $_FILES['userfile']['photo1'];

        if ($file != 0) {
            $uploadfile = $uploaddir . $file;

            $name = "photo1-".$bookID;
            $photoPath = '/home/thebakpa/resources/book_photos/'.$name.'.jpg';

            $mysqli->query('UPDATE Book SET photo1='.$photoPath.' WHERE bookID='.$bookID.'');
            move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile);
        }

        $file = $_FILES['userfile']['photo2'];

        if ($file != 0) {
            $uploadfile = $uploaddir . $file;

            $name = "photo2-".$bookID;
            $photoPath = '/home/thebakpa/resources/book_photos/'.$name.'.jpg';

            $mysqli->query('UPDATE Book SET photo1='.$photoPath.' WHERE bookID='.$bookID.'');
            move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile);
        }

        $file = $_FILES['userfile']['photo3'];

        if ($file != 0) {
            $uploadfile = $uploaddir . $file;

            $name = "photo3-".$bookID;
            $photoPath = '/home/thebakpa/resources/book_photos/'.$name.'.jpg';

            $mysqli->query('UPDATE Book SET photo1='.$photoPath.' WHERE bookID='.$bookID.'');
            move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile);
        }
    } catch(Exception $ex){
        echo "ERROR:".$ex->GetMessage()."\n";
        exit(1);
    }
}
?>


推荐答案

问题在您的PHP源代码的savePhotos函数中。还有一些用iOS代码编写的额外代码。我删除了多余的代码。尝试一次。

Problem is in your savePhotos function of PHP source. Also some extra code written in iOS code. I have removed extra code. Try once.

这是更新的iOS代码

Alamofire.upload(.POST, urlString, multipartFormData: {
        multipartFormData in

        if (firstPhoto != nil) {
            if  let firstImageData = UIImagePNGRepresentation(firstImage!, 0.6) {
                print("uploading image");
                multipartFormData.appendBodyPart(data: firstImageData, name: "firstImage", fileName: "firstImage.png", mimeType: "image/png")
            }
        }

        if (secondPhoto != nil) {
            if  let secondImageData = UIImagePNGRepresentation(secondImage!, 0.6) {
                print("uploading image");
                multipartFormData.appendBodyPart(data: secondImageData, name: "secondImage", fileName: "secondImage.png", mimeType: "image/png")
            }
        }

        if (thirdPhoto != nil) {
            if  let thirdImageData = UIImagePNGRepresentation(thirdImage!, 0.6) {
                print("uploading image");
                multipartFormData.appendBodyPart(data: thirdImageData, name: "thirdImage", fileName: "thirdImage.png", mimeType: "image/png")
            }
        }

        for (key, value) in parameters {
            multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
        }

        }, encodingCompletion: {
            encodingResult in

            switch encodingResult {
            case .Success(let upload, _, _):
                print("Запрос отправлен")
                upload.responseJSON { response in
                    print(response.request)  // original URL request
                    print(response.response) // URL response
                    print(response.data)     // server data
                    print(response.result)   // result of response serialization

                    if let JSON = response.result.value {
                        print("JSON: \(JSON)")
                    }
                    completion(response.result.value)
                }

            case .Failure(let encodingError):
                print(encodingError)
                completion(nil)
            }
    })

}

这是PHP代码

function savePhotos($mysqli, $bookID) {
    $basePath = '/home/thebakpa/resources/book_photos/'
    if(!is_dir($basePath)) {
        mkdir($basePath, 0777, true);
    }
    try {
        $file1 = $_FILES['firstImage'];

        if (is_uploaded_file($file1['tmp_name'])) {
            $photoPath = $basePath.'photo1-'.$bookID.'.jpg';

            if (move_uploaded_file($file1['tmp_name'], $photoPath)) {
                $mysqli->query('UPDATE Book SET photo1='.$photoPath.' WHERE bookID='.$bookID.'');
            }
        }

        $file2 = $_FILES['secondImage'];

        if (is_uploaded_file($file2['tmp_name'])) {
            $photoPath = $basePath.'photo2-'.$bookID.'.jpg';

            if (move_uploaded_file($file2['tmp_name'], $photoPath)) {
                $mysqli->query('UPDATE Book SET photo2='.$photoPath.' WHERE bookID='.$bookID.'');
            }
        }

        $file3 = $_FILES['thirdImage'];

        if (is_uploaded_file($file3['tmp_name'])) {
            $photoPath = $basePath.'photo3-'.$bookID.'.jpg';

            if (move_uploaded_file($file3['tmp_name'], $photoPath)) {
                $mysqli->query('UPDATE Book SET photo3='.$photoPath.' WHERE bookID='.$bookID.'');
            }
        }
    } catch(Exception $ex){
        echo "ERROR:".$ex->GetMessage()."\n";
        exit(1);
    }
}

这篇关于使用Alamofire从iOS上传PHP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆