赛事添加页面,上传图片成功后。刷新页面,再次上传图片会报错

来源:8-9 赛事直播员图片发布 - 上传图片(三)

大漠胡杨_0002

2018-10-16

赛事添加页面:xxx.test:8811/admin/live.html 上传图片成功后,再次刷新该页面,点击上传图片,报错。
报错信息:
0
68
/home/vagrant/code/swoole/thinkphp/thinkphp/library/think/File.php
SplFileObject::__construct(/tmp/swoole.upfile.Tc3YnH): failed to open stream: No such file or directory

目前只能 kill 掉后台 sw 进程,重新启动,上传图片一次。刷新页面,再上传就报上面错误。

请高手指定!

写回答

5回答

就我皮

2021-01-26

虽然好久的问题了,但是后来的我也遇到了。

后来者在有遇到的可以看下 下面 的解决方式。

常驻内存引起的。一开始老师讲过。 

搜索 TP 源码里的 file 方法。  可以全局搜索 比如  直接搜 : function file(

就可以搜到。

然后将 

//if (empty($this->file)) {

//}

注释掉 即可 。

1
0

大漠胡杨_0002

提问者

2018-10-19

Image.php 代码

<?php
namespace app\admin\controller;

use app\common\lib\Util;

class Image
{
    public function index()
    {
//        print_r($_FILES);
        $file = request()->file('file');
        $info = $file->move('../public/static/upload');
//        print_r($info);

        if ($info) {
            $data = [
                'image' => config('live.host') . $info->getSaveName(),
            ];
            return Util::show(config('code.success'), 'OK', $data);
        } else {
            return Util::show(config('code.error'), 'error');
        }
        return 'image';
    }
}


0
4
大漠胡杨_0002
回复
singwa
好的,谢谢!
2018-10-23
共4条回复

大漠胡杨_0002

提问者

2018-10-19

live.html代码:

<!DOCTYPE html>
<html>
  
  <head>
    <meta charset="UTF-8">
    <title>singwa赛事直播-主持人页面</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi" />
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
    <link rel="stylesheet" href="./css/font.css">
    <link rel="stylesheet" href="./css/xadmin.css">
    <link rel="stylesheet" type="text/css" href="../webuploader/webuploader.css">
    <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    <script type="text/javascript" src="./lib/layui/layui.js" charset="utf-8"></script>
    <script type="text/javascript" src="./js/xadmin.js"></script>
    <!-- 让IE8/9支持媒体查询,从而兼容栅格 -->
    <!--[if lt IE 9]>
      <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
      <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
    <script type="text/javascript" src="../webuploader/webuploader.js"></script>
  
  </head>
  
  <body>
    <div class="x-body">
        <form class="layui-form">

          <div class="layui-form-item">
            <label for="username" class="layui-form-label">
              <span class="x-red">*</span>第几节
            </label>
            <div class="layui-input-inline">
              <select id="type" name="type" class="valid">
                <option value="1">第一节</option>
                <option value="2">第二节</option>
                <option value="3">第三节</option>
                <option value="4">第四节</option>
              </select>
            </div>
          </div>
          <div class="layui-form-item">
            <label for="username" class="layui-form-label">
              <span class="x-red">*</span>球队
            </label>
            <div class="layui-input-inline">
              <select id="team_id" name="team_id" class="valid">
                <option value="0">请选择</option>
                <option value="1">马刺</option>
                <option value="4">火箭</option>
              </select>
            </div>
          </div>


          <div class="layui-form-item layui-form-text">
              <label for="desc" class="layui-form-label">
                赛况内容
              </label>
              <div class="layui-input-block">
                  <textarea placeholder="请输入内容" id="content" name="content" class="layui-textarea"></textarea>
              </div>
          </div>

          <div class="layui-form-item layui-form-text">
            <label for="desc" class="layui-form-label">
              赛况图
            </label>
            <!--dom结构部分-->
            <div id="uploader-demo">
              <!--用来存放item-->
              <div id="fileList" class="uploader-list"></div>
              <div id="filePicker">选择图片</div>
            </div>

          </div>

          <div class="layui-form-item">
              <label for="L_repass" class="layui-form-label">
              </label>
              <button  type="submit" class="layui-btn"  lay-filter="add" id="submit-btn" lay-submit="">
                  增加
              </button>
          </div>
      </form>
    </div>
    <script>
        var $ = jQuery,
            $list = $('#fileList'),
            // 优化retina, 在retina下这个值是2
            ratio = window.devicePixelRatio || 1,

            // 缩略图大小
            thumbnailWidth = 100 * ratio,
            thumbnailHeight = 100 * ratio,

            // Web Uploader实例
            uploader;

        // 初始化Web Uploader
        uploader = WebUploader.create({

            // 选完文件后,是否自动上传。
            auto: true,

            // swf文件路径
            swf: '../webuploader/Uploader.swf',

            // 文件接收服务端。
            server: 'http://thinkphp-swoole.test:8811/?s=admin/image/index',

            // 选择文件的按钮。可选。
            // 内部根据当前运行是创建,可能是input元素,也可能是flash.
            pick: '#filePicker',

            // 只允许选择图片文件。
            accept: {
                title: 'Images',
                extensions: 'gif,jpg,jpeg,bmp,png',
                mimeTypes: 'image/*'
            }
        });
        // 当有文件添加进来的时候
        uploader.on( 'fileQueued', function( file ) {
            var $li = $(
                    '<div id="' + file.id + '" class="file-item thumbnail">' +
                    '<img>' +
                    '</div>'
                ),
                $img = $li.find('img');


            // $list为容器jQuery实例
            $list.append( $li );

            // 创建缩略图
            // 如果为非图片文件,可以不用调用此方法。
            // thumbnailWidth x thumbnailHeight 为 100 x 100
            uploader.makeThumb( file, function( error, src ) {
                if ( error ) {
                    $img.replaceWith('<span>不能预览</span>');
                    return;
                }

                $img.attr( 'src', src );
            }, thumbnailWidth, thumbnailHeight );
        });
        // 文件上传过程中创建进度条实时显示。
        uploader.on( 'uploadProgress', function( file, percentage ) {
            var $li = $( '#'+file.id ),
                $percent = $li.find('.progress span');

            // 避免重复创建
            if ( !$percent.length ) {
                $percent = $('<p class="progress"><span></span></p>')
                    .appendTo( $li )
                    .find('span');
            }

            $percent.css( 'width', percentage * 100 + '%' );
        });

        // 文件上传成功,给item添加成功class, 用样式标记上传成功。
        uploader.on( 'uploadSuccess', function( file, response ) {
            if(response.status == 0){
                $( '#'+file.id ).append('<input type="hidden" name="image" value="' + response.data.image + '"/>');
            }
            $( '#'+file.id ).addClass('upload-state-done');
        });

        // 文件上传失败,显示上传出错。
        uploader.on( 'uploadError', function( file ) {
            var $li = $( '#'+file.id ),
                $error = $li.find('div.error');

            // 避免重复创建
            if ( !$error.length ) {
                $error = $('<div class="error"></div>').appendTo( $li );
            }

            $error.text('上传失败');
        });

        // 完成上传完了,成功或者失败,先删除进度条。
        uploader.on( 'uploadComplete', function( file ) {
            $( '#'+file.id ).find('.progress').remove();
        });
    

        var $submitBtn = $('#submit-btn');
        // 提交表单
        $submitBtn.click(function (event) {
          event.preventDefault();
          var formData = $('form').serialize();
          // TODO: 请求后台接口跳转界面,前端跳转或者后台跳
          $.get("http://thinkphp-swoole.test:8811?s=admin/live/push&" + formData, function (data) {

            if (data.status == 1) {
              // 登录成功
            }
            // location.href='index.html';
          }, 'json');
        });



    </script>
  </body>

</html>
0
0

singwa

2018-10-18

贴出您的PHP代码。。。

0
2
singwa
回复
大漠胡杨_0002
我看看
2018-10-20
共2条回复

大漠胡杨_0002

提问者

2018-10-16

//img.mukewang.com/szimg/5bc582770001d48309080470.jpg

上图中,“选择图片”按钮,点击也无响应。

0
1
singwa
这个可能是前端页面的问题。
2018-10-20
共1条回复

Swoole入门到实战打造高性能赛事直播平台

swoole创始人推荐,借助Swoole打造高性能直播平台

2228 学习 · 1062 问题

查看课程