![](/img/trans.png)
[英]Rackspace cloud files: Image Upload to rackspace cloud files using PHP
[英]Image Upload to rackspace cloud files using PHP
我正在嘗試使用以下代碼將文件上傳到rackspace雲文件:
Upload.html
<form action="upload.php" enctype="multipart/form-data" method="POST">
File:
<input name="upload" type="file" />
<input name="submit" type="submit" value="Upload To Rackspace!" />
</form>
upload.php的
<?php
// include the API
require('cloudfiles.php');
// cloud info
$username = ""; // username
$key = ""; // api key
// Connect to Rackspace
$auth = new CF_Authentication($username, $key);
$auth->authenticate();
$conn = new CF_Connection($auth);
// Get the container we want to use
$container = $conn->get_container('resumetune');
// store file information
$localfile = $_FILES['upload']['tmp_name'];
$filename = $_FILES['upload']['name'];
// upload file to Rackspace
$object = $container->create_object($filename);
$object->load_from_filename($localfile);
?>
現在我得到了錯誤:
致命錯誤:C:\\ xampp \\ htdocs \\ rackspace \\ cloudfiles.php中未捕獲的異常'BadContentTypeException',消息'Required Content-Type not set':1645堆棧跟蹤:#0 C:\\ xampp \\ htdocs \\ rackspace \\ cloudfiles.php (1962):CF_Object - > _ guess_content_type('C:\\ xampp \\ tmp \\ ph ...')#1 C:\\ xampp \\ htdocs \\ rackspace \\ upload.php(24):CF_Object-> load_from_filename('C:\\ xampp \\ tmp \\ ph ...')在1645行的C:\\ xampp \\ htdocs \\ rackspace \\ cloudfiles.php中拋出#2 {main}
所以任何人都對此有任何想法? 提前致謝。
在函數_guess_content_type()中查看http://github.com/rackspace/php-cloudfiles/blob/master/cloudfiles.php它正在尋找Content-type而它找不到它。 您需要向/ share / magic添加更多信息,或者如果您知道內容類型是什么,則可以在調用load_from_filename之前設置Content-type。
如果您既沒有可用的mime或FileInfo函數,那么這是一個修復:
function _guess_content_type($handle) {
$ext = ".".end(explode(".", $handle));
switch($ext)
{
case 'jpg': $this->content_type = "image/jpeg"; break;
case 'gif': $this->content_type = "image/gif"; break;
case 'png': $this->content_type = "image/png"; break;
default: $this->content_type = "image/jpeg"; break;
}
if ($this->content_type)
return;
if (function_exists("finfo_open")) {
$local_magic = dirname(__FILE__) . "/share/magic";
$finfo = @finfo_open(FILEINFO_MIME, $local_magic);
if (!$finfo)
$finfo = @finfo_open(FILEINFO_MIME);
if ($finfo) {
if (is_file((string)$handle))
$ct = @finfo_file($finfo, $handle);
else
$ct = @finfo_buffer($finfo, $handle);
/* PHP 5.3 fileinfo display extra information like
charset so we remove everything after the ; since
we are not into that stuff */
if ($ct) {
$extra_content_type_info = strpos($ct, "; ");
if ($extra_content_type_info)
$ct = substr($ct, 0, $extra_content_type_info);
}
if ($ct && $ct != 'application/octet-stream')
$this->content_type = $ct;
@finfo_close($finfo);
}
}
if (!$this->content_type && (string)is_file($handle) && function_exists("mime_content_type")) {
$this->content_type = mime_content_type($handle);
}
if (!$this->content_type) {
throw new BadContentTypeException("Required Content-Type not set");
}
return True;
}
如果您沒有啟用FileInfo擴展(默認情況下從PHP 5.30啟用)。 我建議你檢查mime_content_type()函數是否可用。
似乎如果您沒有這些,則無法檢測到Content-Type。 如果現在都不可用,我會得到FileInfo
我發現Chris Bake的解決方案很有幫助。 我需要放一個“。” 在每個擴展名前面。
$ext = ".".end(explode(".", $handle));
switch($ext)
{
case '.jpg': $this->content_type = "image/jpeg"; break;
case '.gif': $this->content_type = "image/gif"; break;
case '.png': $this->content_type = "image/png"; break;
default: $this->content_type = "image/jpeg"; break;
}
您可能還想考慮使用較新的官方Rackspace PHP SDK 。 這是創建對象的示例代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.