文件上传 Thinkcmf thinkphp

HTML前端模版代码:

<div class="row">
                    <div class="file_model col-md-12">
                        <script type="text/html" id="files-item-tpl">
                                <li id="saved-file{id}">
                                    <input id="file-{id}" type="hidden" name="file_urls[]" value="{filepath}">
                                    <input class="form-control" id="file-{id}-name" type="text" name="file_names[]" value="{name}"
                                            style="width: 200px;" title="文件名称">
                                    <a class="btn btn-info" id="file-{id}-preview" href="{preview_url}" target="_blank"><i class="fa fa-download fa-fw"></i></a>
                                    <a class="btn btn-default" href="javascript:uploadOne('文件上传','#file-{id}','file');"><i class="fa fa-upload fa-fw"></i></a>
                                    <a class="btn btn-danger" href="javascript:(function(){$('#saved-file{id}').remove();})();"><i class="fa fa-trash fa-fw"></i></a>
                                    <a class="btn btn-success" href="javascript:(function(){$('#saved-file{id}').before($('#saved-file{id}').next());})();"><i class="fa fa-arrow-down fa-fw"></i></a>
                                </li>
                            </script>

                        <div class="upload_file_div">
                            <h3>附件</h3>
                            <ul id="files" class="pic-list list-unstyled form-inline">
                            </ul>
                            <a href="javascript:uploadMultiFile('附件上传','#files','files-item-tpl','file');"
                                class="btn btn-default">选择文件</a>
                        </div>
                    </div>
                </div>
                <hr>

JS代码

var c=[];
for (var k = 0; k < $('input[name="file_urls[]"]').length; k++) {
    var e={
name:$('input[name="file_names[]"]')[k].value,
url:$('input[name="file_urls[]"]')[k].value
}
    c.push(e);
}
console.log(c)
//c为数组格式的files信息
var files={files:c}

data={files:files}

PHP中

$ins['files']=json_encode($this->request->post("files"));
//直接存储到mysql中的表的files键中

编辑页面

PHP 上执行

注意 默认files值是json存储你需要使用json_decode将其转为array.

$info->files=json_decode($info->files,TRUE)
$this->assign(["info"=>$info]);
#传递给模版

前段模版:给前段传值$info,默认的files 不用操作

 <span>附件</span>
                <div>

                    <ul id="files" class="pic-list list-unstyled form-inline">
                        <notempty name="info.files.files">
                            <foreach name="info.files.files" item="vo">
                                <php>$file_url=cmf_get_file_download_url($vo['url']);</php>
                                <li id="saved-file{$key}">
                                    <input id="file-{$key}" type="hidden" name="file_urls[]"
                                           value="{$vo.url}">
                                    <input class="form-control" id="file-{$key}-name" type="text"
                                           name="file_names[]"
                                           value="{$vo.name}" style="width: 200px;" title="图片名称">
                                    <a class="btn btn-info" id="file-{$key}-preview" href="{$file_url}" target="_blank"><i class="fa fa-download fa-fw"></i></a>
                                    <a class="btn btn-default" href="javascript:uploadOne('文件上传','#file-{$key}','file');"><i class="fa fa-upload fa-fw"></i></a>
                                    <a class="btn btn-danger" href="javascript:(function(){$('#saved-file{$key}').remove();})();"><i class="fa fa-trash fa-fw"></i></a>
                                    <a class="btn btn-success"  href="javascript:(function(){$('#saved-file{$key}').before($('#saved-file{$key}').next());})();"><i class="fa fa-arrow-down fa-fw"></i></a>
                                </li>
                            </foreach>
                        </notempty>
                    </ul>
                    <a href="javascript:uploadMultiFile('附件上传','#files','files-item-tpl','file');"
                       class="btn btn-default">选择文件</a>
                </div>

编辑修改的话如前面的一样!

Tips:

在模型定义中使用protected $type 进行自动转换,如:可以设置为array 这样可以直接插入array的files

<?php
namespace app\model;

use think\Model;

class User extends Model 
{
    protected $type = [
        'status'    =>  'integer',
        'score'     =>  'float',
        'birthday'  =>  'datetime',
        'files'      =>  'array',
    ];
}

发表回复