[英]Rackspace cloud files: Image Upload to rackspace cloud files using PHP
我正在做一個項目,用戶可以在其中上傳個人資料圖像或圖像庫圖像。 現在,它將所有圖像上傳到我的服務器。
現在,我想直接使用php腳本將所有這些圖像上傳到我的機架雲文件中。 例如:
那么你有什么想法,確切地說我該怎么做?
我在用:
預先感謝您的任何回答。
更新:盡管我下面描述的方法仍然可以使用,但是無法直接使用令牌上傳文件(感謝DesignerGuy提供該信息)。 您可以在此處閱讀有關如何執行此操作的更多信息。 我還應該提到,像transloadit這樣的服務現在可以通過將jquery插入HTML表單來使這種事情變得簡單。 我下面描述的方法仍然可行,並且可能會為您提供最大的控制權。
您不能將文件直接加載到Rackspace文件,而無需嘗試將Rackspace憑據嵌入表單中。 即使有可能,也不是一個好主意。 (即,用戶可以使用與您的應用程序無關的憑據添加大量內容)。 因此,要獲得所需的文件(實質上是將文件存儲在Rackspace中)以及文件在服務器中的位置,您需要修改工作流程。 它必須是:
如果您希望文件可公開下載...
如果您只希望-certain-用戶下載該文件...。
如果您的服務器還是機架空間雲實例或常規的Rackspace受管服務器(或者至少是客戶支持告訴我的),則無需為服務器和機架空間文件之間的帶寬付費。 計算Amazon和Rackspace之間的費率時的重要事實。
因此,您既可以將Rackspace文件用作服務器的大型硬盤驅動器,從而控制訪問,也可以將其用作大型的公共分發網絡...但是在兩種情況下,您可能都需要更改以下順序:為您提供所需的步驟...
您可能還會看到一個簡單的示例,該示例使用php將從HTML表單收集的文件上傳到機架文件 。
這些答案很多都是陳舊的,從Orbit的答案來看,我認為此后必須對API進行很多更改。 並且由於ftrotter已經解釋了有關嘗試直接上傳的信息,因此我將向您展示如何從PHP tmp目錄發送文件的更新版本(PHP 5.3樣式)。
首先,我們假設您已經使用composer安裝了API。
首先,您需要包括其自動加載器,然后添加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);
}
}
現在,當文件最終出現在容器中時,您的文件將保留其現有名稱,並且您可以直接從Rackspace Cloud門戶中獲取容器的公共URL路徑。
來自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並添加一些輸出(如果它不起作用)。
我剛剛完成類似的工作。 我以為我會將發現添加到這篇文章中。
首先,將cloudfiles軟件包放置在application / libraries目錄中: https : //github.com/rackspace/php-cloudfiles
然后檢查這個簡單的集成類。 另外,放置在庫目錄中。 https://bitbucket.org/modomg/codeigniter-rackspace-cloudfiles
干杯,傑夫·沃爾特斯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.