upload后,TP后台接收不到数据

提问 已结
9 519
蓬莱斯的石鱼
悬赏:20飞吻
版本:layui 2.2.5 浏览器:chorme
用layui的upload上传图片,后台TP框架收不到数据
前台代码:
	<div class="layui-upload">
<button class="layui-btn" type="button" id="test1">上传图片</button>
</div>
<script>
layui.use('upload',function(){
var upload = layui.upload;
upload.render({
elem:'#test1',
url:'{:U("Goods/imgUpload")}',
method:'post',
data:{id:123},
done:function(res,index,upload){
if(res.code==1){
layer.msg(res.msg);
}}
}
);
})
</script>
后台代码:
	public function imgUpload(){
$file = $_FILES['file']['filename'];
$id = $_POST['id'];
$return = [
'info' => '上传失败!',
'tolink' => "tolink",
'imgid' => "savePathName",
'code' => 1,
'error' =>$file,
'msg'=>"a",
];
echo json_encode($return);
点上传图片,选择完图片,然后去Goods/imgUpload下查看,$file显示null
{"info":"\u4e0a\u4f20\u5931\u8d25!","tolink":"tolink","imgid":"savePathName","code":1,"error":null,"msg":"a"}
回帖
  • @蓬莱斯的石鱼 这是我测试的html代码
    <div class="layui-upload">
    <button type="button" class="layui-btn" id="test1">上传图片</button>

    <div class="layui-upload-list">
    <img class="layui-upload-img" src="" id="demo1">
    <p id="demoText"></p>
    </div>
    </div>

    <script src="../src/layui.js"></script>
    <script>
    layui.use('upload', function() {
    var $ = layui.jquery,
    upload = layui.upload;
    var uploadInst = upload.render({
    elem: '#test1',
    url: 'upload.php',
    data: {id:123},
    accept: 'file',
    exts: "jpg|png|gif|bmp|jpeg|pdf",
    before: function(obj) {
    //预读本地文件示例,不支持ie8
    obj.preview(function(index, file, result) {
    $('#demo1').attr('src', result); //图片链接(base64)
    });
    },
    done: function(res) {
    //如果上传失败
    if (res.code == 0) {
    $('#demo1').attr('src', res.url);
    } else {
    return layer.msg('上传失败');
    }
    },
    error: function() {
    //演示失败状态,并实现重传
    var demoText = $('#demoText');
    demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-mini demo-reload">重试</a>');
    demoText.find('.demo-reload').on('click', function() {
    uploadInst.upload();
    });
    }
    });
    });
    </script>
    0 回复
  • $file = $_FILES['file']['name'];
    没有:
    $file = $_FILES['file']['filename'];
    0 回复
  • 小人人
    2018-3-8
    $file = $this->request->file('file');

    手册不是有一节专门讲上传的吗

    接收的语句是这个,还可以进行安全检查 ..

    谁跟你说用$_FILES的....
    0 回复
  • @小人人 我用的是TP3.2 不是TP5
    $_FILES是PHP原生写法
    0 回复
  • @快乐浪子哥 哦,那个是写错了,但是试了下还是null,然后我在前端写的data数据{id:123},后台用I('post.id')或原生$_POST['id']也是null
    我看了下json返回的数据前端确实又收到了,就搞不懂为什么后台就收不到前台的数据
    0 回复
  • @蓬莱斯的石鱼 经过测试,没有出现你说的问题。。我这边$id = $_POST['id']正常获取
    0 回复
  • @快乐浪子哥 可以把你得代码贴给我看看么?
    0 回复
  • @蓬莱斯的石鱼 我用的不是TP啊
    upload.php
    <?php
    require 'upload.inc.php';
    $save_dir = './upload/';
    $save_url = './upload/';
    $max_size = 1024 * 1024;
    $exts = '*';
    //print_r($_POST['id']);
    //die;
    echo json_encode(uploadFile($save_dir, $save_url, $max_size, $exts));

    upload.inc.php
    <?php
    /*************************************************
    * 本单元写于 :
    * 作者 : 李腾秋
    * E-Mail : litqqs@163.com
    * 版权所有 : 李腾秋
    * 修改 :2018/03/05
    * 改进如下 :
    * 1、修复批量上传的情况下uniqid函数出现重复
    * 2、改进不需要设置文件域file的名称
    *************************************************/
    /*************************************************
    上传处理相关函数
    例子:
    require 'upload.inc.php';
    $save_dir = './upload/';
    $save_url = './upload/';
    $max_size = 1024 * 1024;
    $exts = '*';
    echo json_encode(uploadFile($save_dir, $save_url, $max_size, $exts));

    *************************************************/
    /**
    * 处理上传文件
    * 返值结构
    * -code 出错代码,0表示成功
    * -msg 出错信息
    * -url 保存后的网址
    * -file 相对保存目录的文件路径
    * -name 原始文件名
    * -ext 上传文件的后缀小写形式,如".jpg"
    * @param string $save_dir 保存文件目录
    * @param string $save_url 目录的web访问网址
    * @param int $max_size 文件最大尺寸
    * @param bool $auto_create_sub_dir 是否将自动建子目录来保存文件
    * @param array $exts 允许后缀,"*"表示所有. 图片后缀例: "*.jpg;*.gif;*.png"
    * @return array
    */
    function uploadFile($save_dir, $save_url, $max_size = 0, $exts = '*', $auto_create_sub_dir = true)
    {
    $result = array();
    $result['code'] = 0;
    $result['msg'] = '';
    //上传后文件网址
    $result['url'] = '';
    //相对保存目录的文件路径
    $result['file'] = '';
    $result['name'] = '';
    //上传文件的后缀小写形式,如".jpg"
    $result['ext'] = '';
    //增加直接获取文件域对象,不需要手动设置
    $file = $_FILES;
    if (!empty($file) && is_array($file)) {
    if (!isset($file['file']['tmp_name']) || !is_uploaded_file($file['file']['tmp_name'])) {
    $result['code'] = 1;
    $result['msg'] = '失败:上传失败';
    return $result;
    }
    //检查大小
    if ($max_size > 0 && $file['file']['size'] > $max_size) {
    $result['code'] = 2;
    if ($max_size > 1048576) {
    //1M
    $size = round($max_size / 1048576, 2) . 'MB';
    } elseif ($max_size > 1024) {
    $size = round($max_size / 1024, 2) . 'KB';
    } else {
    $size = $max_size . 'B';
    }
    $result['msg'] = '失败:文件太大, 请上传小于 ' . $size . ' 的文件.';
    return $result;
    }
    $result['name'] = $file['file']['name'];
    $ext = $result['ext'] = '.' . strtolower(pathinfo($file['file']['name'], PATHINFO_EXTENSION));
    //文件后缀检查
    if ($exts != '*.*' && $exts != '*') {
    $exts = explode(',', strtolower($exts));
    if (!in_array(substr($ext, 1), $exts)) {
    $result['code'] = 3;
    $result['msg'] = '失败:请上传(' . $exts . ')格式文件';
    return $result;
    }
    }
    $p = $auto_create_sub_dir ? date('Ym/d/') : '';
    if (!is_dir($save_dir . $p) && !mkdir($save_dir . $p, 0777, true)) {
    $result['code'] = 4;
    $result['msg'] = '失败:建目录[' . $p . ']失败';
    return $result;
    }
    $newFile = md5(uniqid(md5(microtime(true)), true));
    $f = $p . $newFile . $ext;
    while (is_file($save_dir . $f)) {
    $f = $p . time() . '_' . $newFile . $ext;
    }
    if (!move_uploaded_file($file['file']['tmp_name'], $save_dir . $f)) {
    $result['code'] = 5;
    $result['msg'] = '失败, 写入文件[' . $save_dir . $f . ']失败.';
    return $result;
    }
    $result['url'] = $save_url . $f;
    $result['file'] = $f;
    return $result;
    }
    $result['code'] = 1;
    $result['msg'] = '失败:上传失败';
    return $result;
    }
    0 回复
  • @快乐浪子哥 搞不定,试了下写原生的input框 后台可以接收,用layui的upload就不行
    0 回复