为jquery文件上传脚本创建jpeg图像数据

时间:2012-01-04 14:42:43

标签: jquery mysql image-upload

我正在使用Jquery File Script替换现有的上传脚本。在我当前的脚本中,我捕获原始图像数据并将其推送到我的数据库,但它似乎不适用于jquery上载脚本。

以下是我在私有函数中使用它的方法: handle_file_upload

private function handle_file_upload($uploaded_file, $name, $size, $type, $error) {
    $file = new stdClass();
    $file->name = $this->trim_file_name($name, $type);
    $file->size = intval($size);
    $file->type = $type;
    $error = $this->has_error($uploaded_file, $file, $error);
    if (!$error && $file->name) {
        $file_path = $this->options['upload_dir'].$file->name;
        $append_file = !$this->options['discard_aborted_uploads'] &&
            is_file($file_path) && $file->size > filesize($file_path);
        clearstatcache();
        if ($uploaded_file && is_uploaded_file($uploaded_file)) {
            // multipart/formdata uploads (POST method uploads)
            if ($append_file) {
                file_put_contents(
                    $file_path,
                    fopen($uploaded_file, 'r'),
                    FILE_APPEND
                );
            } else {
                move_uploaded_file($uploaded_file, $file_path);
            }
        } else {
            // Non-multipart uploads (PUT method support)
            file_put_contents(
                $file_path,
                fopen('php://input', 'r'),
                $append_file ? FILE_APPEND : 0
            );
        }
        $file_size = filesize($file_path);
        if ($file_size === $file->size) {
                if ($this->options['orient_image']) {
                    $this->orient_image($file_path);
                }
            $file->url = $this->options['upload_url'].rawurlencode($file->name);
            foreach($this->options['image_versions'] as $version => $options) {
                if ($this->create_scaled_image($file->name, $options)) {
                    $file->{$version.'_url'} = $options['upload_url']
                        .rawurlencode($file->name);
                }
            }
        } else if ($this->options['discard_aborted_uploads']) {
            unlink($file_path);
            $file->error = 'abort';
        }
        $file->size = $file_size;
        $file->delete_url = $this->options['script_url']
            .'?file='.rawurlencode($file->name);
        $file->delete_type = 'DELETE';


        // ====== NEW DB CODE ======= //

        $server = 'XXXX';
        $user = 'XXX';
        $pass = 'XXX'; 
        $database= 'XXX';

        $db = mysql_connect($server,$user,$pass);
        $db_select = mysql_select_db($database,$db);

        ob_start(); // Start capturing stdout.
        imagejpeg($uploaded_file); // As though output to browser.
        $image_bin = mysql_real_escape_string(ob_get_contents()); // the raw jpeg image data.
        ob_end_clean(); // Dump the stdout so it does not screw other output.

        $user_id = 5;
        $title = '';
        $caption = '';

        $mapimage = 0;

        $SQL = "INSERT INTO images VALUES (NULL, {$user_id}, '{$title}', "
        . "'{$caption}', '{$image_bin}' )";
        $mrh = mysql_query($SQL);
        if (!$mrh) {
            $res->st=false;
            $res->error="Error creating image record: " .$SQL. mysql_error($dbh);
            return $res;
        }

        // ====== END NEW DB CODE ======= //



    } 
    else {
        $file->error = $error;
    }
    return $file;
}

它会插入图像,但在查看图像时,我会看到一个破碎的图像图标,这让我觉得它没有插入它应该是什么。图像的DB内容也非常小(字节),告诉我我没有插入我认为我的内容。

知道我可能缺少什么吗?

1 个答案:

答案 0 :(得分:1)

也许:

imagejpeg($file_path);

而不是:

imagejpeg($uploaded_file);