CloudnのObjectStorageで、MultipartUploadを試してみました。
AWS SDK for PHP 2は、getcomposer.org よりインストールしました。インストール方法はこちらの記事を参照。
<?php require_once("aws/vendor/autoload.php"); use Aws\Common\Aws; use Aws\Common\Enum\Size; use Aws\S3\Enum\CannedAcl; use Aws\Common\Enum\Region; use Aws\Common\Exception\MultipartUploadException; use Aws\S3\Model\MultipartUpload\UploadBuilder; use Aws\S3\S3Client; $access_key = '--access_key---'; $secret_key = '---secret_key---'; $region = Region::AP_NORTHEAST_1; // Region::AP_NORTHEAST_1 = Tokyo Region $end_point_url = 'http://str.cloudn-service.com'; $bucket = 'devstore'; try { // S3 // $s3 = Aws::factory(array( // 'key' => $access_key, // 'secret' => $secret_key, // 'base_url' => $end_point_url // ))->get('s3'); $config = array( 'key' => $access_key, 'secret' => $secret_key, 'base_url' => $end_point_url ); $s3 = S3Client::factory($config); $filename = 'P1000267.JPG'; $transfer = UploadBuilder::newInstance() ->setClient($s3) ->setSource($filename) ->setBucket($bucket) ->setKey($filename) ->setMinPartSize ( 5 * Size::MB) ->build(); $transfer->upload(); } catch (MultipartUploadException $e) { echo $e->getPrevious(); $transfer->abort(); }
実行させると、以下エラーとなってしまう。過去のフォーラムの投稿をみていると、AWS SDK for PHP 2のバグでBucketに”(ダブルコーティション)を利用しているとエラーになることがあるが、SDK自体は最新を使っている(と思う。たぶん)のでこのケースは考えにくい。S3に正常にアップロードできるので、あとはCloudn側しか原因が考えられない。
$ php upload-test2.php Aws\S3\Exception\MalformedXMLException: AWS Error Code: MalformedXML, Status Code: 400, AWS Request ID: ACEE3A10F51811E2, AWS Error Type: client, AWS Error Message: The XML you provided was not well-formed or did not validate against our published schema., User-Agent: aws-sdk-php2/2.4.1 Guzzle/3.7.1 curl/7.19.7 PHP/5.3.3 MUP[
また、S3で対応しているブラウザからストレージにアップロードを行える『 Browser-Based Uploaded by POST』にはObject StorageではPOST Objectをサポートしていないので、使うことができない。(同じクラウドストレージ基盤を使用しているニフティクラウドストレージも未サポートでした。)
上記の件でCloudnのサポートから以下の回答を頂きました。結論分割送信は現時点で動作しないとことです。
こちらでも、調査確認させていただきましたが、
させていただきました。
現時点では、もうしわけございませんが、
することがでません。
引き続き、調査を進めてまいります。
追記させていただきたく思います。
S3が一番使い勝手がいい。S3の場合、トラフィック課金があるので、トラフィック量によっては、コストが掛かる場合もありうる。アップロードは、ブラウザを使わず、Javaで実装がいいのか。
CompleteMultiUploadにバグがあった模様。バグfixする前も、S3では問題ない動作をしていたのは疑問が残るところ。
https://twitter.com/tatsuya6502/status/383525950907904000