Frage

Ich mache ein Projekt, bei dem Benutzer Bilder wie Profilbild oder Bild für ihr Image gallary hochladen. jetzt alle Bilder auf meinen Server seine hochzuladen.

Nun, ich möchte dieses Bild alle Dateien auf meine Rackspace Cloud direkt PHP-Skript laden. Zum Beispiel:

  1. Benutzer eine Datei auswählen
  2. Presse mit einigen Informationen
  3. einreichen
  4. wird die ausgewählte Datei auf die Höheneinheit Server hochgeladen werden und den Speicherort der Datei zurück.
  5. dann der Speicherort der Datei zusammen mit anderen Informationen wird in der Datenbank gespeichert werden.
  6. dann zeige ich die Datei oder das Bild von diesem Ort aus.

so haben u irgendeine Idee, genau, wie ich dies tun kann?

Ich bin mit:

  • Codeigniter Rahmen
  • jQuery als JavaScript-Bibliothek

Vielen Dank im Voraus für jede Antwort.

War es hilfreich?

Lösung

Update: Obwohl die Methode, die ich weiter unten beschreiben wird immer noch funktioniert, ist es nicht möglich, Dateien zu direkt Token (dank DesignerGuy für diese Informationen verwenden ). Sie können mehr darüber lesen, wie das hier zu tun. Ich sollte auch erwähnen, dass Dienste wie transloadit nun diese Art der Sache machen einfach leicht jquery Einsätze in HTML-Formulare verwenden. Immer noch die Methode, die ich weiter unten noch beschreiben funktioniert und wahrscheinlich gibt Ihnen die Kontrolle.

Sie können nicht geladen werden Dateien -directly- zu Dateien Rackspace, ohne wie etwas zu versuchen, Ihre Anmeldeinformationen in die Rackspace Formular einbetten. Selbst wenn dies möglich wäre, wäre es nicht eine gute Idee sein. (D könnte der Benutzer hinzufügen massiven Inhalt Ihre Anmeldeinformationen verwenden, die nichts mit Ihrer Anwendung zu tun haben). Also zu bekommen, was Sie wollen, die im wesentlichen die Datei bei Rackspace gespeichert zu haben ist, und die Position der Datei in Ihrem Server benötigen Sie gespeichert Ihre Arbeitsabläufe zu ändern. Es muss sein:

  1. Form Uploads Dateiserver -Ihr -
  2. -Ihr server- die Container und die Dateinamen berechnet, dass die Datei verwenden
  3. -Ihr server- Uploads die temporäre Datei Dateien auf Rackspace

Wenn Sie die Datei öffentlich zum Download zu sein ...

  1. -Ihr server- ermöglicht die Datei über das CDN bedient werden, eine öffentliche URL für die Datei zu machen, dass die Benutzer zugreifen können.
  2. , wenn der Server erzeugt HTML es die CDN Urls bettet und der Benutzer erhält auf magische Weise die Dateien

Wenn Sie die Datei wollen nur herunterladbare von -certain- Benutzer sein ....

  1. -Ihr server- authentifiziert mit Rackspace und lädt die Datei vorübergehend
  2. -Ihr server- dient die Datei und die HTML sowohl von Ihrem Server

Sie zahlen nicht für die Bandbreite zwischen -Ihr server- und Rackspace-Dateien, wenn -Ihr server- auch eine Rackspace Cloud-Instanz oder ein regulärer Rackspace Managed Server (oder zumindest das ist, was Kunden-Support hat mir gesagt). Eine wichtige Tatsache bei der Berechnung der Preise zwischen Amazon und Rackspace.

So können Sie entweder als Dateien Rackspace massive Festplatte für den Server, die Sie über den Zugriff zu steuern gibt, oder Sie können es als ein massives öffentliches Verteilungsnetz nutzen ... Aber in beiden Fällen müssen Sie möglicherweise die Reihenfolge der Schritte ändern, die Sie geben, was Sie wollen ...

Sie können auch sehen: ein einfaches Beispiel pHP zu verwenden, eine Datei zu laden gesammelt von einem HTML-Formular-Dateien Rackspace.

Andere Tipps

von 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');
    }

von welcome_message.php:

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

Probleme, die ich gestoßen:

cacert.pem ~ Diese Datei muss in Ihrem Web-Verzeichnis gehen und kommt mit dem api.

Sie müssen fileinfo von pecl kann, und dafür kann man libmagic müssen (wenn Sie es nicht haben bereits).

Sie müssen auch das Paket php5-curl, und PHP nicht curl Fehler meldet, so in die api graben und eine Ausgabe hinzufügen, wenn es nicht funktioniert.

Viele dieser Antworten sind alt und auf der Suche auf Orbit Antwort Ich denke, es gibt viele Änderungen an der API haben muss seit damals. Und da ftrotter bereits erklärt zu versuchen, direkt zu laden, zeige ich Ihnen eine aktualisierte Version (PHP 5.3-Stil), wie man Bitte senden Sie die Dateien aus dem PHP tmp-Verzeichnis.

Zuerst nehmen wir an Sie bereits die API Komponist installiert.

Zuerst müssen Sie die Autoloader schließen und dann den use Namespace hinzuzufügen.

require 'vendor/autoload.php';

use OpenCloud\Rackspace as Rackspace;

Dann Sie einfach Setup der Client-Instanz

// 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');

Nun, da Sie Ihre Behälter haben können Sie einfach Ihre Setup-Array von Dateien und sie laden. Hier ist eine schnelle und schmutzige Art und Weise:

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);
    }
}

Jetzt können Sie Ihre Dateien werden ihre bestehenden Namen behalten, wenn sie in den Behälter am Ende, und Sie können den öffentlichen URL-Pfad für Ihren Container direkt aus dem Rackspace Cloud Portal erhalten.

Ich habe gerade ähnlich mit etwas getan. Ich dachte, ich meine Erkenntnisse zu diesem Beitrag hinzufügen würde.

Zuerst legen Sie die cloudfiles Paket in Ihrer Anwendung / Bibliotheken Verzeichnis: https://github.com/rackspace/php-cloudfiles

Dann diese einfache Integrationsklasse überprüfen. Außerdem legt in Bibliotheken Verzeichnis. https://bitbucket.org/modomg/codeigniter-rackspace-cloudfiles

Cheers, Jeff Walters

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top