猿问

阿里云OSS对象存储的使用

  1. 为了后面页面的扩展,我想迁移现有项目的静态资源和上传文件到阿里云的OSS上。
  2. 可是我的上传图片功能,是通过前端传base64,后台解码,然后转移到磁盘上。
  3. oss类中有方法uploadFile()
    /**
     * 上传本地文件
     *
     * @param string $bucket bucket名称
     * @param string $object object名称
     * @param string $file 本地文件路径
     * @param array $options
     * @return null
     * @throws OssException
     */
    public function uploadFile($bucket, $object, $file, $options = NULL)
    {
        $this->precheckCommon($bucket, $object, $options);
        OssUtil::throwOssExceptionWithMessageIfEmpty($file, "file path is invalid");
        $file = OssUtil::encodePath($file);
        if (!file_exists($file)) {
            throw new OssException($file . " file does not exist");
        }
        $options[self::OSS_FILE_UPLOAD] = $file;
        $file_size = filesize($options[self::OSS_FILE_UPLOAD]);
        $is_check_md5 = $this->isCheckMD5($options);
        if ($is_check_md5) {
            $content_md5 = base64_encode(md5_file($options[self::OSS_FILE_UPLOAD], true));
            $options[self::OSS_CONTENT_MD5] = $content_md5;
        }
        if (!isset($options[self::OSS_CONTENT_TYPE])) {
            $options[self::OSS_CONTENT_TYPE] = $this->getMimeType($object, $file);
        }
        $options[self::OSS_METHOD] = self::OSS_HTTP_PUT;
        $options[self::OSS_BUCKET] = $bucket;
        $options[self::OSS_OBJECT] = $object;
        $options[self::OSS_CONTENT_LENGTH] = $file_size;
        $response = $this->auth($options);
        $result = new PutSetDeleteResult($response);
        return $result->getData();
    }
  1. 需要三个参数,可是我base64解码的文件按理说应该是没有路径的,那么我如何在不修改现有功能的情况下,使用oss的上传功能呢?
  2. 请大佬解惑。
红颜莎娜
浏览 1314回答 4
4回答

至尊宝的传说

……你解码以后存一下再发给OSS不就得了。。。。

元芳怎么了

方法不对uploadFile()传本地文件的,oss还有个putObject()方法,用来直接传内存数据,我之前的项目中As3直接HttpRequest传base64数据到后端,获取到了直接传入就能用的。

泛舟湖上清波郎朗

oss 有个web直传的功能,更爽
随时随地看视频慕课网APP
我要回答