处理前端文件上传,考虑安全性和易用性

时间:2012-02-12 作者:turbonerd

我正在寻找一个现有的类似论坛的插件,它没有连接媒体的功能。

该插件作为一种自定义帖子类型工作,因此它就像将图像附加到帖子一样“简单”。

我只关心附加图像,而不是任何文件类型,但插件确实使用wp_editor 因此,解决方案应该在某种程度上与此相结合。只要解决方案能够将图像的缩略图插入到tinyMCE文本区域中,我就不会对创建tinyMCE按钮过于担心。

请注意,我指的是我网站的前端,而不是管理区域。

在绝对理想的情况下,我希望出现这种情况:

用户单击“询问问题”用户输入其帖子详细信息用户单击tinyMCE界面上的按钮,该按钮类似于StackExchange,要求用户上载文件

我偶然发现this link 但我总是担心读t\'interwebs上的WordPress文章,因为我从来都不太确定它们有多安全,也不太相信我是php安全专家。

提前感谢,

2 个回复
最合适的回答,由SO网友:goldenapples 整理而成

我认为这是最简单的方法,因为您已经在使用wp_editor 功能将只包括WP\\U编辑器实例中的媒体按钮-这样,您将拥有本机功能,包括免费内置的“插入帖子”按钮。

您如何做到这一点显然取决于您尝试使用的插件。然而,这应该让你开始。在页面模板中包含这样的代码以显示编辑器,您将在页面上获得一个编辑器。将其包含在表单中并处理结果是此处未详述的另一个步骤。

// Define the global variable $post_id - this is used by the media uploader
// to attach uploads to a specific post (so that the uploader can see uploads
// attached to this post and not others)
global $post_id;
$post_id = $post->ID; // should be the ID of the new post created

// Now filter the list of tabs available in the media editor.
// Remove everything but the "From Computer" option.

add_filter( \'media_upload_tabs\', \'wpse42068_remove_additional_tabs\' );

function wpse42068_remove_additional_tabs( $_default_tabs ) {
    return array( \'type\' => __(\'From Computer\') );
}

// Now just include the WP_Editor. See
// http://codex.wordpress.org/Function_Reference/wp_editor
// for settings available
wp_editor( \'\', \'posteditor\', array( \'media_buttons\' => true ) );
定义post-ID可能是关键的部分,如何做到这一点将取决于功能的逻辑。我建议:

第一次访问此页面时创建自动草稿,并保存全局$post\\u ID变量中返回的帖子ID

SO网友:ifdion

也许这不是你理想的解决方案,但值得一试。通过谷歌搜索得到,但不幸的是我忘记了url。附件与@goldenapples文章中的附件类似。

下面是基本功能。

function attach_uploads($uploads,$post_id = 0){
    $files = rearrange($uploads);
    if($files[0][\'name\']==\'\'){
        return false;   
    }
    foreach($files as $file){
        $upload_file = wp_handle_upload( $file, array(\'test_form\' => false) );
        $attachment = array(
        \'post_mime_type\' => $upload_file[\'type\'],
        \'post_title\' => preg_replace(\'/\\.[^.]+$/\', \'\', basename($upload_file[\'file\'])),
        \'post_content\' => \'\',
        \'post_status\' => \'inherit\'
    );
        $attach_id = wp_insert_attachment( $attachment, $upload_file[\'file\'], $post_id );
        $attach_array[] = $attach_id;
        require_once(ABSPATH . \'wp-admin/includes/image.php\');
        $attach_data = wp_generate_attachment_metadata( $attach_id, $upload_file[\'file\'] );
        wp_update_attachment_metadata( $attach_id, $attach_data );
    }
    return $attach_array;
}
ajax函数

add_action(\'wp_ajax_attach_file\', \'process_attach_file\');
function process_attach_file() {

    // add some filter and validation on the id and the files here
    $post_id = $_POST[\'post_id\'];
    $files = $_FILES[\'profile-picture\'];

    // insert attachment
    $attached_files = attach_uploads($files,$post_id);

    // set the first file as post thumbnail
    if($attached_files){
        set_post_thumbnail( $post_id, $attached_files[0] ); 
    }

    // now all you have to do is set the response data

}
标记

<form id="upload-form" action="<?php echo admin_url(\'admin-ajax.php\'); ?>" method="post" class="form" enctype="multipart/form-data" >
    <label for="profile-picture">Foto Profil</label>
    <input type="file" id="profile-picture" name="profile-picture[]" size="40" multiple />
    <?php wp_nonce_field( // intention nonce); ?>
    <input name="action" value="attach_file" type="hidden">
    <input name="post_id" value="12" type="hidden">
</form>
希望这有帮助

结束

相关推荐

Security and .htaccess

大约一个月前,我在一个与爱好相关的托管服务器上创建了一个WordPress博客。所以,我目前还不熟悉这一点。由于我担心安全性,我做的一件事就是安装插件WP安全扫描。根据插件结果,我的网站会被检查出来,但我在结果中看到的是一个红旗:文件。wp admin中不存在htaccess/(我在那里ssh了,它不存在)好的,所以我在这个问题上做了大量的搜索,找到了太多的信息。htaccess。我在WordPress上经历了强化WordPress。org网站等,也遇到了这篇文章:http://digwp.com/201