12

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

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

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

正確にはどうすればこれを行うことができますか?

私は使っている:

  • Codeigniter フレームワーク
  • JavaScript ライブラリとしての jQuery

答えてくれてありがとう。

4

4 に答える 4

19

更新: 以下で説明する方法は引き続き機能しますが、トークンを使用してファイルを直接アップロードすることはできません (その情報についてはDesignerGuyに感謝します)。その方法について詳しくは、こちらをご覧ください。また、 transloaditなどのサービスにより、jquery を HTML フォームに挿入することで、この種の作業が非常に簡単になることにも言及しておく必要があります。それでも、以下で説明する方法は引き続き機能し、おそらくほとんどの制御が可能です。

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

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

ファイルを一般にダウンロード可能にする場合...

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

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

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

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

したがって、Rackspace Files をサーバー用の大容量ハード ドライブとして使用してアクセスを制御することも、大規模なパブリック ディストリビューション ネットワークとして使用することもできます...ただし、どちらの場合も、あなたが望むものをあなたに与えるためのあなたのステップ...

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

于 2010-02-08T15:41:39.223 に答える
1

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-curl も必要で、php は curl エラーを報告しないため、API を掘り下げて、機能しない場合は出力を追加します。

于 2010-08-04T02:16:08.790 に答える
0

私は似たようなことをやり遂げました。この投稿に私の調査結果を追加すると思いました。

最初に、cloudfiles パッケージを application/libraries ディレクトリに配置します: https://github.com/rackspace/php-cloudfiles

次に、この単純な統合クラスを確認してください。また、ライブラリ ディレクトリに配置します。 https://bitbucket.org/modomg/codeigniter-rackspace-cloudfiles

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

于 2011-06-26T16:26:59.620 に答える