rpcms插件开发时插件配置文件如何实现图片上传

阅读1068评论0

在开发rpcms插件的时候,使用到了配置文件,想让用户在后台可以直接配置修改图片,不需要再去服务器中操作了。

翻遍了官网的文档和教程也没见说这一块的。。估计官方正在慢慢更新教程吧。。


某的办法,只能靠自己了,也趁这个机会研究研究rpcms,功夫不负有心人哈,终于让我找到了。

其实吧,人家官方有说,在“帮助文档”中的“辅助函数”一栏中,有一个“uploadFiles”方法,这个就是官方封装好的上传文件函数。

原来是我误会官方大哥了,怪我没仔细仔细再仔细的看文档(说实话,就不能把文档整理清楚点吗...),下面看教程哈。


先看下uploadFiles这个方法的参数

uploadFiles(file, logId, pageId)
file:需要上传的图片或文件
logId:文章的ID,可以不填
pageId:单页的ID,可以不填


首先,在 Setting.class.php 配置文件对应的模板中加入表单,这里以ajax上传图片为例。

比如:
<div class="ws_upload">
    <input type="file" accept="image/*" class="wx_file">
    <button type="button" class="ws_upload_btn">上传微信二维码图片</button>
</div>

对应的JS代码:

$(".ws_upload_btn").click(function(){
    var _this=$(this),
        fileObj = ".wx_file",
        formData = new FormData(),
        file=$(fileObj)[0].files[0],
        isUpload=_this.data('isUpload') || false;
    if(isUpload) return !1;
    if(!file){
        $.Msg('请先选择图片文件');return !1;
    }
    formData.append("files", file);
    _this.attr('disabled',true).data('isUpload',true);
    $.ajax({
        'url':"{:url('plugin/run')}?to=插件名称/Setting/uploadImg",
        'type':'post',
        'data':formData,
        'contentType': false,
        'processData': false,
        'dataType':'json',
        'mimeType': 'multipart/form-data',
        'beforeSend':function(){
            $.loading('正在上传...');
        },
        'success':function(res){
            if(res.code == 200){
                $.closeModal();
                var imgUrl=res.data;
                /*
                *这里是你的逻辑操作,返回的res中的data元素是上传图片的地址
                */                
            }else{
                $.Msg(res.msg);
            }
        },
        'complete':function(){
            delete formData;
            $(fileObj).val(''),_this.attr('disabled',false).data('isUpload',false);
        },
        'error':function(){
            $.Msg('请求服务器失败');
        }
    })
    
})

和大家讲解一下上面的js,使用了FormData创建表单,ajax提交的url只需要改下?to=后面的内容就可以了

小知识:rpcms在后台运行插件是host/plugin/run.html?to=运行插件的方法

方法的写法:插件名称(即插件文件夹名称)/插件的mod/方法


如上面的ajax提交地址,我是把上传方法写在了插件文件夹中的Setting.class.php文件里面的uploadImg方法了。


最后,Setting.class.php的uploadImg方法

public function uploadImg(){
    $file=isset($_FILES['files']) ? $_FILES['files'] : '';
    if(empty($file)){
        return json(array('code'=>-1,'msg'=>'上传图片不能为空'));
    }
    return json(uploadFiles($file));
}


到此为止,插件配置中就可以上传图片了,而且还是异步上传哟~

小伙伴们可以举一反三使用在其他地方哈。随便提醒下各位,一定要细心!细心!再细心!很多时候不是我们找不到,而是没注意到!