首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rackspace云文件:使用PHP将图像上传到rackspace云文件

Rackspace云文件:使用PHP将图像上传到rackspace云文件
EN

Stack Overflow用户
提问于 2010-02-06 20:06:09
回答 4查看 11.1K关注 0票数 12

我正在做一个项目,用户可以上传图像,如个人资料图像或图像为他们的图像库。现在它把所有的图像上传到我的服务器上。

现在,我想直接使用php脚本将所有这些图像上传到我的rackspace云文件中。例如:

  1. 用户选择文件
  2. 按提交并提供一些信息
  3. 所选文件将上载到rackspace服务器并返回文件位置。
  4. 然后,文件位置以及其他信息将保存在我的数据库中。
  5. 然后我将显示该位置的文件或图像。

你知道我是怎么做到的吗?

我正在使用:

  • Codeigniter框架
  • jQuery作为javascript库

事先谢谢您的答复。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-08 15:41:39

更新:虽然我下面描述的方法仍然有效,但不可能直接使用令牌上传文件(感谢DesignerGuy提供该信息)。您可以阅读更多关于如何实现这里的内容。我还应该提到,像转盘这样的服务现在使得将jquery插入到HTML中变得非常简单。不过,我在下面描述的方法仍然有效,并可能给您最大的控制。

如果不尝试将Rackspace凭据嵌入表单中,就不能直接将文件加载到Rackspace文件中。即使这是可能的,这也不是一个好主意。(也就是说,用户可以使用与应用程序无关的凭据添加大量内容)。因此,要获得所需的内容,即将文件存储在Rackspace中,以及文件存储在服务器中的位置,您需要修改工作流程。它必须是:

  1. 表单上传文件到-your服务器-
  2. -your服务器-计算文件将使用的容器和文件名。
  3. -your服务器-将临时文件上载到rackspace文件

如果你想让文件公开下载.

  1. -your服务器-允许通过CDN提供文件,为用户可以访问的文件创建一个公共URL。
  2. 当您的服务器创建html时,它嵌入CDN urls,用户神奇地获取文件。

如果你希望这个文件只能被某些用户下载.

  1. -your服务器-使用rackspace进行身份验证并临时下载该文件。
  2. -your服务器-从您的服务器提供文件和HTML。

您不需要为-your服务器(如果是-your服务器)和rackspace文件之间的带宽付费,这也是一个rackspace云实例或一个普通的Rackspace托管服务器(或者至少客户支持部门已经告诉我了)。在计算Amazon和Rackspace之间的费率时,这是一个重要的事实。

因此,您可以使用Rackspace文件作为服务器的大规模硬盘驱动器,这使您可以控制访问,也可以使用它作为一个庞大的公共分发网络.但在这两种情况下,你可能需要改变你的步骤的顺序来给你想要的.

您还可以查看使用php将从HTML表单收集的文件上载到rackspace文件的简单示例

票数 19
EN

Stack Overflow用户

发布于 2014-04-03 18:49:59

这些答案中有很多是旧的,从那时起,我想从那时起,轨道答案一定有很多变化。由于ftrotter已经解释了试图直接上传,我将向您展示如何从PHP目录发送文件的更新版本(PHP5.3样式)。

首先,假设您已经使用composer安装了API。

首先,您需要包含它们的自动加载程序,然后添加use命名空间。

代码语言:javascript
复制
require 'vendor/autoload.php';

use OpenCloud\Rackspace as Rackspace;

然后简单地设置客户端实例。

代码语言:javascript
复制
// 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');

现在您已经拥有了容器,您可以简单地设置您的文件数组并上传它们。下面是一种快速而肮脏的方式:

代码语言:javascript
复制
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 Cloud门户中获得容器的公共URL路径。

票数 2
EN

Stack Overflow用户

发布于 2010-08-04 02:16:08

来自welcome.php:

代码语言:javascript
复制
    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:

代码语言:javascript
复制
<form method="post" action="#" enctype="multipart/form-data"s>
<input type="file" name="upload"><br/>
<input type="submit">
</form>

我遇到的问题:

cacert.pem ~这个文件需要进入您的web目录并附带api。

你可能需要来自pecl的文件信息,为此,你可能需要lib魔术(如果你还没有)。

您还需要php5-curl包,而php不报告curl错误,所以如果它不能工作,就深入api并添加一些输出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2214540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档