2010-02-06 14 views
11

का उपयोग कर रैकस्पेस क्लाउड फाइलों पर अपलोड करें, मैं एक ऐसा प्रोजेक्ट कर रहा हूं जहां उपयोगकर्ता अपनी छवि गैलरी के लिए प्रोफ़ाइल छवि या छवि जैसी छवियां अपलोड कर सके। अभी यह मेरे सर्वर पर सभी छवियों को अपलोड कर रहा है।रैकस्पेस क्लाउड फाइलें: छवि PHP,

अब, मैं इस सभी छवि को सीधे मेरी रैकस्पेस क्लाउड फ़ाइलों पर PHP स्क्रिप्ट का उपयोग करना चाहता हूं। उदाहरण के लिए:

  1. उपयोगकर्ता एक फ़ाइल का चयन
  2. प्रेस में कुछ जानकारी
  3. चयनित फ़ाइल रैकस्पेस सर्वर पर अपलोड किया जाएगा के साथ जमा करें और फ़ाइल स्थान लौटने।
  4. फिर अन्य जानकारी के साथ फ़ाइल स्थान मेरे डेटाबेस में सहेजा जाएगा।
  5. तो मैं उस स्थान से फ़ाइल या छवि दिखाऊंगा।

तो क्या आपके पास कोई विचार है, मैं वास्तव में यह कैसे कर सकता हूं?

मैं उपयोग कर रहा हूँ:

  • CodeIgniter ढांचे
  • jQuery जावास्क्रिप्ट पुस्तकालय के रूप में किसी भी सवाल का जवाब के लिए पहले से

धन्यवाद।

उत्तर

19

अपडेट: हालांकि मैं जिस विधि का वर्णन करता हूं वह अभी भी काम करेगा, लेकिन टोकन का उपयोग करके फ़ाइलों को सीधे अपलोड करना संभव नहीं है (उस जानकारी के लिए DesignerGuy पर धन्यवाद)। आप here को कैसे करें इसके बारे में अधिक पढ़ सकते हैं। मुझे यह भी उल्लेख करना चाहिए कि transloadit जैसी सेवाएं अब HTML प्रकारों में jquery प्रविष्टियों का उपयोग करके इस तरह की चीज़ को आसानी से आसान बनाती हैं। फिर भी जिस विधि का मैं नीचे वर्णन करता हूं वह अभी भी काम करता है और शायद आपको सबसे अधिक नियंत्रण देता है।

आप फ़ाइलों को लोड नहीं कर सकते- प्रत्यक्ष रूप से- रैकस्पेस फ़ाइलों को, बिना किसी रैकस्पेस क्रेडेंशियल को फ़ॉर्म में एम्बेड करने की कोशिश किए बिना। यहां तक ​​कि यदि यह संभव था तो यह एक अच्छा विचार नहीं होगा। (यानी उपयोगकर्ता आपके क्रेडेंशियल का उपयोग करके भारी सामग्री जोड़ सकता है जिसका आपके आवेदन से कोई लेना-देना नहीं है)। तो आप जो चाहते हैं उसे प्राप्त करने के लिए, जो अनिवार्य रूप से रैकस्पेस में संग्रहीत फ़ाइल है, और आपके सर्वर में संग्रहीत फ़ाइल का स्थान आपको अपने कार्य प्रवाह को संशोधित करने की आवश्यकता है। सर्वर

  • -आपका सर्वर कंटेनर और फ़ाइल नाम गणना की है कि फाइल
  • -आपका सर्वर फ़ाइलों रैकस्पेस के लिए अस्थायी फ़ाइल अपलोड करता है का उपयोग करेगा -आपका को

    1. फार्म अपलोड फ़ाइल: यह होने की जरूरत है

    आप फ़ाइल को सार्वजनिक रूप से डाउनलोड होना चाहते हैं ...

    1. -आपका सर्वर फ़ाइल सक्षम बनाता है CDN, makin के माध्यम से प्रस्तुत किया जाना है जी उस फ़ाइल के लिए एक सार्वजनिक यूआरएल है जिसे आपका उपयोगकर्ता एक्सेस कर सकता है।
    2. जब अपने सर्वर HTML यह CDN यूआरएल एम्बेड करता है और उपयोगकर्ता जादुई फाइलों

    हो जाता है जब आप फ़ाइल -certain- उपयोगकर्ताओं द्वारा केवल डाउनलोड करने योग्य होना चाहते हैं बनाता है ....

    1. -आपका सर्वर रैकस्पेस साथ प्रमाणित करता है और फ़ाइल अस्थायी रूप से
    2. -आपका सर्वर फ़ाइल और HTML दोनों अपने सर्वर से कार्य करता है डाउनलोड करता

    आप करना बैंड सर्वर के लिए भुगतान नहीं करें- आपके सर्वर- और रैकस्पेस फ़ाइलों के बीच, यदि आपका सर्वर- एक रैकस्पेस क्लाउड इंस्टेंस या नियमित रैकस्पेस प्रबंधित सर्वर भी है (या कम से कम ग्राहक समर्थन ने मुझे बताया है)। अमेज़ॅन और रैकस्पेस के बीच दरों की गणना करते समय एक महत्वपूर्ण तथ्य।

    तो आप या तो अपने सर्वर के लिए भारी हार्ड ड्राइव के रूप में रैकस्पेस फ़ाइलों का उपयोग कर सकते हैं, जो आपको पहुंच पर नियंत्रण देता है, या आप इसे बड़े पैमाने पर सार्वजनिक वितरण नेटवर्क के रूप में उपयोग कर सकते हैं ... लेकिन दोनों मामलों में आपको आवश्यकता हो सकती है आप जो चाहते हैं उसे देने के लिए अपने चरणों का क्रम बदलने के लिए ...

    आप a simple example of using php to upload a file gathered from an HTML form to rackspace files पर भी देख सकते हैं।

  • +0

    ग्रेट उत्तर - धन्यवाद! कहीं और उस साधारण उदाहरण की जांच करनी होगी (खाता निलंबित)। शायद यह वेबैक मशीन पर है। मेरे मामले में मेरे पास एक आईओएस ऐप है जो मैं फ़ाइलों को सीधे रैकस्पेस फ़ाइलों पर पोस्ट करना पसंद करूंगा। बेशक हमारे पास ऐप में एक्सेस कुंजी नहीं हो सकती है! मुझे याद है कि फेसबुक में एक तंत्र होता था जिसके द्वारा सर्वर पर एक टोकन उत्पन्न किया जा सकता था (एसएसएल अनुरोध के माध्यम से) और उसके बाद सीमित समय के लिए ऐप द्वारा उपयोग किया जाता था। इसे कभी भी खुले में नहीं बचाया गया था (केवल सुरक्षित कीचेन तक)। शायद रैकस्पेस फ़ाइलों के लिए ऐसा करने का कोई तरीका है? मैं टोकन भी नहीं बचाऊंगा। बस जरूरत के रूप में इसका इस्तेमाल करें। –

    +1

    अब आप सीधे फाइलफाइल पर एक फाइल अपलोड कर सकते हैं। आप अनुरोध के लिए टोकन/हस्ताक्षर बनाते हैं और सीधे सबमिट करने के लिए एक फॉर्म का उपयोग कर सकते हैं। Http://docs.rackspace.com/files/api/v1/cf-devguide/content/Create_the_Form-d1a777.html – DesignerGuy

    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 ~ इस फ़ाइल में अपने वेब निर्देशिका में जाने की जरूरत है और एपीआई के साथ आता है।

    आपको pecl से fileinfo की आवश्यकता हो सकती है, और इसके लिए आपको libmagic की आवश्यकता हो सकती है (यदि आपके पास पहले से नहीं है)।

    आपको पैकेज php5-curl की भी आवश्यकता है, और php कर्ल त्रुटियों की रिपोर्ट नहीं करता है, इसलिए एपीआई में खोदें और अगर यह काम नहीं कर रहा है तो कुछ आउटपुट जोड़ें।

    0

    मुझे अभी कुछ इसी तरह से किया गया है। मैंने सोचा कि मैं इस पोस्ट में अपने निष्कर्ष जोड़ूंगा।

    पहले, अपने आवेदन/पुस्तकालयों निर्देशिका में cloudfiles पैकेज जगह: https://github.com/rackspace/php-cloudfiles

    तो इस सरल एकीकरण वर्ग की जाँच करें। इसके अलावा, पुस्तकालय निर्देशिका में जगह। https://bitbucket.org/modomg/codeigniter-rackspace-cloudfiles

    चीयर्स, जेफ वाल्टर्स

    1

    इन उत्तरों का एक बहुत पुरानी है और मुझे लगता है कि तब से एपीआई के लिए कई परिवर्तन किए गए हैं चाहिए Orbit's answer को देख रहे हैं। और ftrotter already explained से सीधे अपलोड करने का प्रयास करने के बाद, मैं आपको PHP tmp निर्देशिका से फ़ाइलों को भेजने के तरीके के बारे में एक अद्यतन संस्करण (PHP 5.3 शैली) दिखाऊंगा।

    सबसे पहले हम मान लेंगे कि आप कंपोज़र का उपयोग कर पहले ही एपीआई स्थापित कर चुके हैं।

    सबसे पहले आपको अपने ऑटोलोडर को शामिल करने की आवश्यकता होगी और फिर 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); 
        } 
    } 
    

    अब आप अपनी फ़ाइलों को जब वे कंटेनर में समाप्त, और आप सही रैकस्पेस बादल पोर्टल के भीतर से अपने कंटेनर के लिए सार्वजनिक URL पथ प्राप्त कर सकते हैं अपने मौजूदा नाम रखेंगे।

    +0

    यह काम नहीं कर रहा है और कहता है "OpenCloud \ ObjectStore \ Resource \ Container के लिए गुम तर्क 2 :: uploadObject (), " –

    +0

    @ kamlesh.bar यह 'uploadObjects()' (बहुवचन) होना चाहिए। मेरा उदाहरण 'uploadObjects()' का उपयोग करता है, अगर मुझे मदद मिलती है तो मुझे बताएं –

    संबंधित मुद्दे