الملفات السحابية Rackspace: تحميل الصور إلى الملفات السحابية Rackspace باستخدام PHP

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

سؤال

أقوم بمشروع حيث يمكن للمستخدم تحميل صور مثل صورة الملف الشخصي أو صورة لصورتها العارض. الآن تحميلها جميع الصور إلى خادمي.

الآن، أريد تحميل كل هذه الصورة إلى ملفات سحابة Rackspace مباشرة باستخدام البرنامج النصي PHP مباشرة. علي سبيل المثال:

  1. حدد المستخدم ملف
  2. اضغط على إرسال مع بعض المعلومات
  3. سيتم تحميل الملف المحدد إلى خادم Rackspace وإرجاع موقع الملف.
  4. ثم سيتم حفظ موقع الملف مع معلومات أخرى في قاعدة البيانات الخاصة بي.
  5. ثم سأظهر الملف أو الصورة من هذا الموقع.

لذلك لديك أي فكرة، بالضبط كيف يمكنني القيام بذلك؟

انا استخدم:

  • الإطار Codeigniter.
  • jQuery كما مكتبة جافا سكريبت

شكرا مسبقا على أي إجابة.

هل كانت مفيدة؟

المحلول

تحديث: على الرغم من أن الطريقة التي أصف بها أدناه ستظل تعمل، فليس من الممكن تحميل الملفات مباشرة باستخدام الرموز الرموز (بفضل Designerguy. لهذه المعلومات). يمكنك قراءة المزيد حول كيفية القيام بذلك هنا. وبعد يجب أن أذكر أيضا أن الخدمات مثل البطولة الآن قم بعمل هذا النوع من الأشياء بشكل تافه باستخدام JQuery INSERTS في نماذج HTML. لا تزال الطريقة التي أصف بها أدناه لا تزال تعمل وربما يمنحك أكثر السيطرة.

لا يمكنك تحميل الملفات -Directly- إلى ملفات Filspace، دون محاولة شيء مثل تضمين بيانات اعتماد Backspace الخاصة بك في النموذج. حتى لو كان ذلك ممكنا، فلن يكون ذلك فكرة جيدة. (أي يمكن للمستخدم إضافة محتوى ضخمة باستخدام بيانات الاعتماد الخاصة بك التي لا علاقة لها بتطبيقك). لذا احصل على ما تريد، والتي تتمتع بشكل أساسي بتخزين الملف عند استخدام الملفات، وموقع الملف المخزن في الخادم الخاص بك تحتاج إلى تعديل تدفق عملك. يحتاج ان يكون:

  1. نموذج تحميل الملف إلى -Your Server-
  2. -Your Server - محسوبة الحاوية واسم الملف الذي سيستخدمه الملف
  3. -تحميل Server - تحميل الملف المؤقت لملفات Rackspace

إذا كنت تريد أن يكون الملف قابلا للتنزيل ...

  1. - قم بتمكين Herver الخاص بك من الخدمة من خلال CDN، مما يجعل عنوان URL عمومي للملف الذي يمكن لمستخدمك الوصول إليه.
  2. عندما يقوم الخادم بإنشاء HTML تضمين عناوين URL CDN ويحصل المستخدم بطريقة سحرية على الملفات

إذا كنت تريد أن يكون الملف قابل للتنزيل فقط من قبل-أكسيد المستخدمين ....

  1. - Server - يصادق مع Rackspace وتنزيل الملف مؤقتا
  2. -Your Server- يخدم الملف و HTML كلاهما من الخادم الخاص بك

لا تدفع ثمن ملفات النطاق الترددي بين ملفات Server و Rackspace، إذا كان الخادم الخاص بك، هو أيضا مثيل سحابي من الركض أو خادم مدار Fullspace العادي (أو على الأقل هذا هو ما أخبرني بدعم العملاء). حقيقة مهمة عند حساب المعدلات بين الأمازون والعرف.

لذلك يمكنك إما استخدام ملفات Rackspace كملفات صعبة ضخمة لخادمك، والذي يمنحك التحكم في الوصول، أو يمكنك استخدامه كشبكة توزيع عام ضخمة ... ولكن في كلتا الحالتين قد تحتاج إلى تغيير ترتيب خطواتك لتعطيك ما تريد ...

قد تنظر أيضا إلى مثال بسيط على استخدام PHP لتحميل ملف يتم جمعها من نموذج HTML إلى ملفات Rackspace.

نصائح أخرى

من 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 ~ يحتاج هذا الملف إلى الذهاب في دليل الويب الخاص بك ويأتي مع API.

قد تحتاج إلى fileinfo من pecl، ولهذا قد تحتاج labmagic (إذا لم يكن لديك بالفعل).

تحتاج أيضا إلى الحزمة PHP5-Curl، ولا تبلغ PHP عن أخطاء حليقة، لذلك حفر في API وإضافة بعض الإخراج إذا لم يعمل.

الكثير من هذه الإجابات قديمة والنظر إجابة المدار أعتقد أنه يجب أن يكون هناك العديد من التغييرات في API منذ ذلك الحين. ومنذ ذلك شرح Ftrotter بالفعل حول محاولة التحميل مباشرة، سأظهر لك نسخة محدثة (نمط PHP 5.3) لكيفية إرسال الملفات من دليل PHP TMP.

أولا، سوف نفترض أنك قمت بالفعل بتثبيت API باستخدام الملحن.

أولا، ستحتاج إلى تضمين AutoLoader الخاص بهم ثم إضافة 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 العام للحاوية مباشرة من داخل بوابة Cloud Space.

لقد فعلت للتو مع شيء مماثل. اعتقدت أنني سأضيف نتائجي إلى هذا المنصب.

أولا، ضع حزمة CloudFiles في دليل التطبيقات / المكتبات الخاصة بك:https://github.com/rackspace/php-cloudfiles.

ثم تحقق من فئة التكامل البسيطة هذه. أيضا، ضع في دليل المكتبات.https://bitbucket.org/modomg/codeigniter-rackspace-cloudfiles.

هتافات، جيف والترز

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top