2020-11-11 20:25:15 2172次浏览 3条回答 0 悬赏 10 金钱

阿里云 OSS 多次上传同一张图片失败,如何解决呢?
FileUpload 上传图片的时候,第一张图片可以上传成功,第二次上传同一张图片的时候点击没反应,换一张图片就可以正常上传,这个怎么弄可以让即使多次上传同一张图片也可以?

  • 回答于 2020-11-13 10:40 举报

    你是服务器上传还是前端JS 上传呢

    2 条回复
    回复于 2020-11-13 10:55 回复

    使用yii自带的包,前端上传,调用widget小部件

    回复于 2020-11-17 10:02 回复

    我对接第三方接口一般不用别人的插件,自己写就最好,想怎么改就怎么改。我自己写的上传oss没出现你这个情况,同一张图片随时随地可以传。你的情况要么是插件有问题,要么前端没写好导致。没代码我也很难帮你找出问题所在

  • 回答于 2020-11-13 11:34 举报

    你通过 浏览器F12 通过network 查看 哪里应该有更多的信息

  • 回答于 2020-11-17 10:09 举报
        /**
         * 上传文件至OSS
         * @param array $file 上传后的临时文件对象
         * @return string|int 返回地址或错误码
         * @throws
         */
        public function uploadFileOss(&$file)
        {
            if (empty($file)) return -1;
            if ($file['error'] != 0) {
                FunctionUtil::newLog($file['error'], 'error', 'uploadFile');
                return -2;
            }
    
            //设置文件黑名单
            if (strpos($file['name'], 'php') !== false) return -3;
    
            //设置文件白名单
            $fileNameArr = explode('.', $file['name']);
            if (!in_array(end($fileNameArr), ['jpg', 'gif', 'png', 'jpeg'])) return -3;
    
            //上传至OSS
            $oss = new Oss();
            $nameArr = explode('.', $file['name']);
            $suffix = end($nameArr); //获取后缀
            $object = 'images/' . date('Y-m', time()) . '/avatar/' . md5($file['tmp_name'] . uniqid()) . '.' . $suffix;
            $uploadOssResult = $oss->uploadFile($object, $file['tmp_name']);
    
            return $uploadOssResult['info']['url'];
        }
        
    #######下面方法是我自己封装的oss操作类###############################################################
        
        class Oss
    {
        //阿里云accessKeyId
        private $accessKeyId;
        //阿里云accessKeySecret
        private $accessKeySecret;
        //OSS endpoint
    //    private $endPoint = 'oss-cn-shenzhen-internal.aliyuncs.com'; //默认内网访问
        private $endPoint; //默认外网访问
        //OSS Bucket 存储空间名称
        private $bucket;
    
        public $ossClient;
    
        public function __construct()
        {
            //设置默认属性
            $ossConfig = \Yii::$app->params['taobao']['oss'];
            $this->setAccessKeyId($ossConfig['accessKeyId']);
            $this->setAccessKeySecret($ossConfig['accessKeySecret']);
            $this->setBucket($ossConfig['bucket']);
            $this->setEndPoint($ossConfig['extEndPoint']);
            if (!strpos($_SERVER['SERVER_NAME'], '52tktk')) { //不在线上服务器则外网访问
                $this->setEndPoint($ossConfig['extEndPoint']); //外网访问
            }
    
            //加载oss客户端对象
            $this->ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endPoint);
        }
    
        public function setAccessKeyId($accessKeyId)
        {
            $this->accessKeyId = $accessKeyId;
        }
    
        public function setAccessKeySecret($accessKeySecret)
        {
            $this->accessKeySecret = $accessKeySecret;
        }
    
        public function setEndPoint($endPoint)
        {
            $this->endPoint = $endPoint;
        }
    
        public function setBucket($bucket)
        {
            $this->bucket = $bucket;
        }
    
        public function getBucket()
        {
            return $this->bucket;
        }
    
        public function getShowUrl()
        {
            return 'https://' . $this->bucket . $this->endPoint;
        }
    
        /**
         * 文件上传,自动识别简单上传或者分片上传
         * @param string $object object名称
         * @param string $file 需要上传的本地文件的路径
         * @param array $options Key-Value数组
         * @return null
         * @throws OssException
         */
        public function uploadFile($object, $file, $options = null)
        {
            return $this->ossClient->multiuploadFile($this->bucket, $object, $file, $options);
        }
    
        /**
         * 字符串上传
         * @param string $object 需要上传的本地文件的路径
         * @param string $content 内容
         * @return null
         */
        public function putObject($object, $content)
        {
            return $this->ossClient->putObject($this->bucket, $object, $content);
        }
    }
    
您需要登录后才可以回答。登录 | 立即注册
PHP学院的中学生
副总裁

PHP学院的中学生

注册时间:2018-10-23
最后登录:2024-04-07
在线时长:168小时1分
  • 粉丝29
  • 金钱4730
  • 威望30
  • 积分6710

热门问题