Typecho插件:AliOssForTypecho--使用AliyunOSS储存Typecho上传附件

2020年6月,本插件发布1.1.8版本。


2022年,humu更新插件,支持php8。有需要的朋友请到Github自取。


更新内容

此版本修复了以前版本的一些BUG,做了一些改善,主要有:

  1. 使用aliyun-oss-php-sdk Release 2.3.1开发;
  2. 不再为每个文件创建单独的文件夹;
  3. 检测已上传过的文件,若存在同名文件,则自动命名为 name(1).ext,name(2).ext...;
  4. 优化了上传失败后的逻辑,详细记录失败日志,在插件配置页面即可看到;
  5. 增加新功能,可自定义图片处理样式;

祝使用愉快~

插件信息

插件名:AliOssForTypecho
作者:droomo
当前版本:v1.1.8
更新时间:2020-06-27
下载地址:https://github.com/droomo/AliOssForTypecho/archive/v1.1.8.zip
百度网盘:https://pan.baidu.com/s/1JeyjeFLLEYd2G4pRcL_O7w 提取码:bum0
Github地址:https://github.com/droomo/AliOssForTypecho

使用方法

  1. 下载插件,若github地址打不开,可通过百度网盘下载;
  2. 解压插件,将解压后的文件夹重命名为AliOssForTypecho
  3. 替换原来插件。

使用截图

使用截图


另外针对评论中提议较多的做出一些解释:
Q: 为什么不根据文章id来归档?
A: 因为在上传附件时,插件并无法得到文章信息。根据日期归档是通常做法,与Wordpress保持一致。

历史版本:

插件使用说明:

  • 插件基于aliyun-oss-php-sdk Release 2.3.0开发, 若以后SDK开发包更新导致插件不可用,请到 我的博客 ^ - ^获取新版本插件, 如果我还用typecho还用阿里云就会更新。
  • 请赋予 文件上传目录 以及 插件日志目录 写权限,否则可能导致上传失败。
  • 若开启“在服务器保留备份”功能:
    成功保存文件到OSS但没有成功保存到服务器的情况下插件不会报错, 这将导致当前文件在服务器上没有备份,但是会插件日志目录下生成错误日志"error.log",请定期查阅并清理。
  • 运行在云应用引擎上的站点“在服务器保留备份”选项无效。
  • 旧版本Typecho存在无法上传大写扩展名文件的bug,请更新Typecho程序。

配置详情:

aliossfortypecho配置.jpg

转载请注明原文链接:http://www.droomo.top/AliOssForTypecho.html

Tag: typecho, plugin, aliossfortypecho, alioss, oss

82 comments

  1. 宫水贵树 宫水贵树

    错误:连接OSS Client实例失败
    错误描述:: RequestId:
    时间:2023-12-14 08:06:45pm
    无法上传文件,但阿里云访问控制显示最近使用了配置中的密钥(最后使用云服务)
    这个问题是插件用的sdk有点老,现在阿里云更新到了2.6.0了,插件还在用2.4.3
    希望作者更新一下,就更新使用的SDK就可以了

  2. yusuble yusuble

    站长您好。 刚才发的可以不看。问题在这。

    错误:连接OSS Client实例失败
    错误描述:RequestCoreException: cURL error: Could not resolve: hellohao.aa.bbb.com (Domain name not found) (6)
    时间:2023-12-10 01:05:29am
    我的Bucket是hellohao,Endpoint是https://aa.bbb.com:9001
    文件路径应该是https://aa.bbb.com:9001/hellohao
    也就是bucket应该在后面,而且得带上端口。 请问我该如何修改代码呢?

    1. moon moon

      看起来跟代码无关,而是域名解析失败了,从错误描述来看是"hellohao.aa.bbb.com"这个域名没有正确解析到IP地址。
      请检查是不是打错地址了,也可以尝试直接修改hosts文件,手动把IP地址到域名的解析填进去。

  3. yusuble yusuble

    作者您好。
    我有其他自建的S3存储,并且在我多个应用对接了。
    而阿里云OSS也是兼容S3存储的,如果要对接我的S3存储,是否只需要代码里把默认的endpoint修改就行了? 因为其他项都是一样的,只是没有提供endpoint设置项。
    那请问我该如何修改呢?

  4. 君若 君若

    为什么会显示“上传文件失败,原因文件已经上传过”,实际上原来并没有这个图片,但是显示这个后,oss上面又有了。Typecho 版本 1.2.1

    1. moon moon

      原因可能是上传到OSS成功了,但保存到服务器失败。建议尝试不在服务器保留备份。

  5. 11 11

    /**

    * 获取实际文件绝对访问路径 * * @access public * @param array $content 文件相关信息 * @return string */ public static function attachmentHandle(array $content) { $options = Typecho_Widget::widget('Widget_Options'); $cdnUrl = $options->plugin('AliOssForTypecho')->cdnUrl; $userDir = $options->plugin('AliOssForTypecho')->userDir; $diy_style = $options->plugin('AliOssForTypecho')->des; $newPath = urlencode($content['attachment']->path); if (empty($cdnUrl)) { $bucket_name = $options->plugin('AliOssForTypecho')->bucketName; $end_point = ($options->plugin('AliOssForTypecho')->endPoint === "other") ? $options->plugin('AliOssForTypecho')->otherEndPoint : $options->plugin('AliOssForTypecho')->endPoint; // return 'https://' . $bucket_name . '.' . $end_point . '.aliyuncs.com/' . $userDir . $content['attachment']->path . $diy_style; return 'https://' . $bucket_name . '.' . $end_point . '.aliyuncs.com/' . $userDir . $newPath . $diy_style; } else { // return $cdnUrl . $userDir . $content['attachment']->path . $diy_style; return $cdnUrl . $userDir . $newPath . $diy_style; } }

    这个位置这么处理一下就行,好像就能处理文件名中带()的问题,因为上传图片后自动把()这种特殊字符阿里自动转换成ascill,然后typecho这边还是(),然后就导致url对不上,然后图片不能正常解析。把url的path重新解析一下就好了。还有一个问题就是我把备份到服务器选项关闭了但是服务器还是会备份,可能是备份到服务器的原因,导致上传比较慢,可能是还要上传到服务器的原因,服务器的上行比较慢。

Leave a new comment