1

Iphone アプリのバックエンドとして Cakephp を使用して、IphoneAPP の Web サービスを作成しています。データベースからのデータの更新/削除/編集ですべてが正常に機能します。つまり、iPhoneアプリはデータベースの対話性で完全に実行されています。

アプリにいくつかの変更を加えた後、iPhoneから投稿するときに画像を保存する必要がありました。投稿時に生成される URL は次のようなものですhttp://somedomainname.com/customer/add/?name=abc&number=165adf&image=89504e470d0a1a0a0000000d494844520000004e0000005f08060000004620f1230000001974455874764536f

上記の URL には、png 画像であるバイナリ形式の画像値が含まれています。バイナリコードをデコードしてフォルダにアップロードしたいと思います。コードを使用してファイルをアップロードしました

$folder= "img/Invoicecustomer";
        $formdata = $data; 
        $itemId = null;
        // setup dir names absolute and relative
        $folder_url = WWW_ROOT.$folder;
        $rel_url = $folder;

        // create the folder if it does not exist
        if(!is_dir($folder_url)) {
            mkdir($folder_url, 0777, true);
            chmod($folder_url, 0777);
        }

        // if itemId is set create an item folder
        if($itemId) {
            // set new absolute folder
            $folder_url = WWW_ROOT.$folder.'/'.$itemId; 
            // set new relative folder
            $rel_url = $folder.'/'.$itemId;
            // create directory
            if(!is_dir($folder_url)) {
                mkdir($folder_url);
            }
        }

        // list of permitted file types, this is only images but documents can be added
        $permitted = array('image/gif','image/jpeg','image/pjpeg','image/png');

        // loop through and deal with the files
        foreach($formdata as $file) {
            // replace spaces with underscores
            $filename = str_replace(' ', '_', $file['signature']);
            // assume filetype is false
            $typeOK = false;
            // check filetype is ok
            foreach($permitted as $type) {
                if($type == $file['type']) {
                    $typeOK = true;
                    break;
                }
            }

            // if file type ok upload the file
            if($typeOK) {
                // switch based on error code
                switch($file['error']) {
                    case 0:
                        // check filename already exists
                        if(!file_exists($folder_url.'/'.$filename)) {
                            // create full filename
                            $full_url = $folder_url.'/'.$filename;
                            $url = $rel_url.'/'.$filename;
                            // upload the file
                            $success = move_uploaded_file($file['tmp_name'], $url);
                        } else {
                            // create unique filename and upload file
                            ini_set('date.timezone', 'Europe/London');
                            $now = date('Y-m-d-His');
                            $full_url = $folder_url.'/'.$now.$filename;
                            $url = $rel_url.'/'.$now.$filename;
                            $success = move_uploaded_file($file['tmp_name'], $url);
                        }
                        // if upload was successful
                        if($success) {
                            // save the url of the file
                            $result['urls'][] = $url;
                        } else {
                            $result['errors'][] = "Error uploaded $filename. Please try again.";
                        }
                        break;
                    case 3:
                        // an error occured
                        $result['errors'][] = "Error uploading $filename. Please try again.";
                        break;
                    default:
                        // an error occured
                        $result['errors'][] = "System error uploading $filename. Contact webmaster.";
                        break;
                }
            } elseif($file['error'] == 4) {
                // no file was selected for upload
                $result['nofiles'][] = "No file Selected";
            } else {
                // unacceptable file type
                $result['errors'][] = "$filename cannot be uploaded. Acceptable file types: gif, jpg, png.";
            }
        }

バイナリ形式のURLから画像を認識していないため、エラーが発生しています。画像をデコードしてフォルダにアップロードするにはどうすればよいですか? また、iPhoneから送信された画像はエンコードされています.Xcodeに画像をデコードするコードがありません。

4

2 に答える 2

1

問題は、最大長による URL (データ) の切り捨てが原因である可能性がありますか? 12を参照してください。

于 2013-08-02T12:27:26.057 に答える
0

単純な PHP 関数を使用して実行できると思います。通常、私はbase64エンコーディング/デコーディング機能を使用して、Webサービスを使用して画像をアップロードします。

以下はコードの抜粋です。

$upload_file = $path_to_folder . '/' . $file_name;
file_put_contents($upload_file, base64_decode($image, true));
//$filesize = filesize($upload_file);
chmod($upload_file, 0777);

ここで $path_to_folder は宛先への相対パスになります。$file_name は任意の動的な名前になり、任意の拡張子 (jpg、png) を持つことができます。例:- $file_name = 'xyz.png'。

「$image」は、モバイル デバイスから取得した base64 でエンコードされた文字列になります。最後の 1 行は、アップロードされたファイルの 777 パーミッションを設定することです。

これがあなたの仕事に役立つことを願っています..

于 2013-08-03T09:45:44.180 に答える