将照片上传到服务器/ rackspace cloudfiles - php/codeigniter

qui*_*and 3 php codeigniter rackspace-cloud

我正在使用此存储库将照片从我的计算机上传到服务器.当我尝试上传名为mylogo.jpg的文件时,我收到一条错误消息:

无法打开文件阅读:/tmp/php0d4X5Ny/mylogo.jpg

我需要弄清楚为什么我会收到这个错误.

这是我的控制器代码(cloudfiles.php):

        public function add_local_file()
        {
                $file_location = $_FILES['userfile']['tmp_name'].'/';
                $file_name = $_FILES['userfile']['name'];

                $this->cfiles->do_object('a', $file_name, $file_location);

                $this->_show_errors('Image Added!');
        }
Run Code Online (Sandbox Code Playgroud)

do_object功能是在这里(线151).这是上传视图:

<?php echo form_open_multipart('cloudfiles/add_local_file'); ?>

<input type="file" name="userfile" size="20" />

<input type="submit" value="upload" />

<?php echo form_close(); ?>
Run Code Online (Sandbox Code Playgroud)

我搜索了cloudfiles库,发现"无法打开文件进行读取"错误是此函数中的一个例外:

function load_from_filename($filename, $verify=true)
    {
        $fp = @fopen($filename, "r");
        if (!$fp) {
            throw new IOException("Could not open file for reading: ".$filename);
        }

        clearstatcache();

        $size = (float) sprintf("%u", filesize($filename));
        if ($size > MAX_OBJECT_SIZE) {
            throw new SyntaxException("File size exceeds maximum object size.");
        }

        $this->_guess_content_type($filename);

        $this->write($fp, $size, $verify);
        fclose($fp);
        return True;
    }
Run Code Online (Sandbox Code Playgroud)

我一直在看这几个小时,看不出有什么问题.顺便说一下,没有看到任何php错误,只是上面提到的一个错误.Stack Overflow的新功能(常用浏览器,新帐户),所以提前感谢您的帮助.

kei*_*eld 5

我不认为你理解$_FILES数组是如何工作的.文件上传后,它位于$_FILES['userfile']['tmp_name']并且没有原始名称.

如果您希望使用原始名称上传文件,则需要执行以下操作:

public function add_local_file()
{
    $file_location = '/tmp/';
    $file_name     = $_FILES['userfile']['name'];

    if(move_uploaded_file($_FILES['userfile']['tmp_name'], $file_location . $file_name)){

        $this->cfiles->do_object('a', $file_name, $file_location);

    }

    $this->_show_errors('Image Added!');
}
Run Code Online (Sandbox Code Playgroud)