Rackspace クラウド ファイル:PHP を使用してラックスペースのクラウド ファイルに画像をアップロードする

StackOverflow https://stackoverflow.com/questions/2214540

質問

ユーザーがプロフィール画像や画像ギャラリーの画像などの画像をアップロードできるプロジェクトを行っています。現在、すべての画像をサーバーにアップロードしています。

ここで、PHP スクリプトを使用して、このすべての画像をラックスペースのクラウド ファイルに直接アップロードしたいと思います。例えば:

  1. ユーザーがファイルを選択する
  2. いくつかの情報を入力して送信を押してください
  3. 選択したファイルはラックスペース サーバーにアップロードされ、ファイルの場所が返されます。
  4. ファイルの場所は他の情報とともにデータベースに保存されます。
  5. 次に、その場所からファイルまたは画像を表示します。

それで、具体的にどうすればいいのか、何かアイデアはありますか?

使っています:

  • コードイグナイター フレームワーク
  • JavaScriptライブラリとしてのjQuery

ご回答をよろしくお願いいたします。

役に立ちましたか?

解決

アップデート:以下で説明する方法は引き続き機能しますが、トークンを使用してファイルを直接アップロードすることはできません (おかげで デザイナーガイ その情報について)。その方法について詳しく読むことができます ここ. 。次のようなサービスについても言及しておきます。 トランスロードイット 今回は、HTML フォームへの jquery 挿入を使用して、この種の作業を簡単に行うことができます。以下で説明する方法は依然として有効であり、おそらく最も制御しやすい方法です。

Rackspace 資格情報をフォームに埋め込むなどの方法を試さない限り、ファイルを Rackspace ファイルに直接ロードすることはできません。たとえそれが可能だったとしても、それは良い考えではありません。(すなわち、ユーザーは、アプリケーションとは関係のない資格情報を使用して大量のコンテンツを追加する可能性があります)。したがって、必要なもの、つまりファイルを Rackspace に保存し、サーバーに保存されているファイルの場所を取得するには、ワークフローを変更する必要があります。それは次のとおりである必要があります。

  1. フォームはファイルを -あなたのサーバー- にアップロードします
  2. -あなたのサーバー- ファイルが使用するコンテナとファイル名を計算しました
  3. -あなたのサーバー- 一時ファイルをラックスペースファイルにアップロードします

ファイルをパブリックにダウンロードできるようにしたい場合は...

  1. -サーバー- により、CDN 経由でファイルを提供できるようになり、ユーザーがアクセスできるファイルのパブリック URL が作成されます。
  2. サーバーが HTML を作成すると、CDN URL が埋め込まれ、ユーザーは魔法のようにファイルを取得します。

ファイルを特定のユーザーのみがダウンロードできるようにしたい場合...

  1. -あなたのサーバー- ラックスペースで認証し、ファイルを一時的にダウンロードします
  2. -あなたのサーバー- ファイルと HTML の両方をサーバーから提供します

-あなたのサーバー-もラックスペースクラウドインスタンスまたは通常のラックスペース管理対象サーバーである場合、-あなたのサーバー-とラックスペースファイル間の帯域幅に対して料金を支払う必要はありません(または、少なくともカスタマーサポートが私にそう言った)。Amazon と Rackspace 間の料金を計算する際の重要な事実。

つまり、Rackspace Files をサーバーの大規模なハードドライブとして使用してアクセスを制御することも、大規模なパブリック配布ネットワークとして使用することもできます...ただし、どちらの場合も、希望どおりの結果を得るには、手順の順序を変更する必要がある場合があります。

こちらもご覧ください php を使用して、HTML フォームから収集したファイルをラックスペース ファイルにアップロードする簡単な例.

他のヒント

welcome.phpから:

    function index()
    {
            if(!empty($_FILES)){
                    require('system/libraries/cloudfiles.php');
                    $upload_dir = 'upload/doc/2';
                    $tmp_name = $_FILES['upload']['tmp_name'];
                    $name = $_FILES['upload']['name'];
                    move_uploaded_file($tmp_name,"$upload_dir/$name");
                    $username = 'ABC';
                    $key = 'X';
                    $auth = new CF_Authentication($username, $key);
                    $auth->authenticate();
                    $conn = new CF_Connection($auth);
                    $container = $conn->get_container('documents');
                    $localfile = "$upload_dir/$name";
                    $object = $container->create_object($name);
                    $object->load_from_filename($localfile);
            }
            $this->load->view('global_header');
            $this->load->view('welcome_message');
    }

welcome_message.phpから:

<form method="post" action="#" enctype="multipart/form-data"s>
<input type="file" name="upload"><br/>
<input type="submit">
</form>

私が遭遇した問題:

このcacert.pem〜このファイルには、あなたのWebディレクトリに行く必要とAPIが付属しています。

あなたはPECLからのFileInfoを必要とするかもしれない、と(あなたはすでにそれを持っていない場合)、このためにあなたがlibmagicのが必要な場合があります。

あなたはまた、パッケージのphp5-カールを必要とし、それが動作しない場合、PHPは、カールエラーを報告し、そのAPIを掘り下げると、いくつかの出力を追加しません。

これらの答えの多くは古く、私はAPIに多くの変更があったに違いないと思うの軌道の答えを見てそれ以来。 ftrotterがすでに直接アップロードしようとしている程度して説明したので、私はあなたにどのように更新されたバージョン(PHP 5.3スタイル)が表示されますPHP tmpディレクトリからファイルを送信ます。

まず、あなたはすでに作曲を使用してAPIをインストールを前提とします。

まず、あなたが彼らのオートローダーが含まれ、その後use名前空間を追加する必要があります。

require 'vendor/autoload.php';

use OpenCloud\Rackspace as Rackspace;

そして、あなたは、単にセットアップクライアントインスタンスを

// first setup the client using your portal username and API key
$client = new Rackspace(Rackspace::US_IDENTITY_ENDPOINT, array(
    'username' => 'YOUR-USERNAME',
    'apiKey'   => 'YOUR-API-KEY'
));

$region = 'DFW'; // can be ORD or various others and must be set

// now get the container
$container = $client->objectStoreService('cloudFiles', $region)
    ->getContainer('YOUR-CONTAINER');

今、あなたはあなたのコンテナを持っていることは、単に設定ファイルのあなたの配列とそれらをアップロードすることができます。ここでは、迅速かつ汚いやり方だ。

if (isset($_FILES)) {
    $files = array();
    foreach ($_FILES as $file) {
        if (0 === $file['error']) {
            $files[] = array(
                'name' => $file['name'],
                'path' => $file['tmp_name']
            );
        }
    }

    if (count($files)) {
        // upload files to Rackspace Cloud Files container
        $result = $container->uploadObjects($files);
    }
}

今、彼らはコンテナで終わるとき、あなたのファイルは、既存の名前を維持します、あなたは右のRackspaceのクラウドポータル内からコンテナの公開URLパスを取得することができます。

私はちょうど似た何かを行ってしまいました。私はこの記事に私の調査結果を追加しようと思いました。

まず、アプリケーション/ライブラリディレクトリにcloudfilesパッケージを配置します。 https://github.com/rackspace/php-cloudfilesする

次に、このシンプルな統合クラスをチェックしてください。また、ライブラリのディレクトリに配置します。 https://bitbucket.org/modomg/codeigniter-rackspace-cloudfilesする

乾杯、 ジェフ・ウォルターズ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top