CloudnのObjectStorageで、MultipartUploadを試してみました。
AWS SDK for PHP 2は、getcomposer.org よりインストールしました。インストール方法はこちらの記事を参照。
require_once ( "aws/vendor/autoload.php" ); |
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; |
$access_key = '--access_key---' ; |
$secret_key = '---secret_key---' ; |
$region = Region::AP_NORTHEAST_1; |
'base_url' => $end_point_url |
$s3 = S3Client::factory( $config ); |
$filename = 'P1000267.JPG' ; |
$transfer = UploadBuilder::newInstance() |
->setMinPartSize ( 5 * Size::MB) |
} catch (MultipartUploadException $e ) { |
実行させると、以下エラーとなってしまう。過去のフォーラムの投稿をみていると、AWS SDK for PHP 2のバグでBucketに”(ダブルコーティション)を利用しているとエラーになることがあるが、SDK自体は最新を使っている(と思う。たぶん)のでこのケースは考えにくい。S3に正常にアップロードできるので、あとはCloudn側しか原因が考えられない。
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のサポートから以下の回答を頂きました。結論分割送信は現時点で動作しないとことです。
こちらでも、調査確認させていただきましたが、お客様と同様のエラーとなることを確認
させていただきました。
現時点では、もうしわけございませんが、確固たる原因およびその対策について明確に返信
することがでません。
引き続き、調査を進めてまいります。情報にアップデートがございましたら、FAQサイトに
追記させていただきたく思います。
S3が一番使い勝手がいい。S3の場合、トラフィック課金があるので、トラフィック量によっては、コストが掛かる場合もありうる。アップロードは、ブラウザを使わず、Javaで実装がいいのか。
CompleteMultiUploadにバグがあった模様。バグfixする前も、S3では問題ない動作をしていたのは疑問が残るところ。
https://twitter.com/tatsuya6502/status/383525950907904000