跳到主要内容
  2020 年 1 月 14 日星期二
  6 回覆
  2.7K访问
  订阅
嗨,

它与 digitalocean 空间和其他 S3 喜欢兼容吗?

并且它是否与 flatsome UX Builder 兼容

谢谢!
A
5年前
你好,

感谢您就此扩展程序与我们联系。

它与digitalocean空间和其他S3喜欢的产品兼容吗?

我们尚不支持Digital Ocean,您当前可以使用Amazon S3:有关更多详细信息:

https://www.joomunited.com/wordpress-products/wp-media-folder/amazon-s3-integration-with-wordpress-media-library

并与平板式UX Builder兼容

是的,它几乎与页面构建器兼容。

希望能帮助到你!
干杯,
5年前
您好,

感谢您的回答。

因为 DO 与 S3 兼容,也许它适用于 DO 凭据和服务器地址,不是吗?:) 你试过了吗?
A
5年前
你好,

感谢您与我联系以获取更多信息。

由于 DO 与 S3 兼容,也许它可以与 DO 凭据和服务器地址一起使用,不是吗?:) 你尝试过吗?


我们尚未使用DO进行测试,我认为这是不可能的。

干杯,
[R
4年前
您可以将其与DigitalOcean一起使用,有一个简单的技巧可以使其工作:

digitalocean.png

由于我只是为客户端完成的,因此我将详细介绍该hack,然后解释如何使它单独工作。

--

尽管我们还没有100%地工作,但我们取得了重大进展:

1. 哈克

DigitalOcean Spaces围绕S3的API构建,并使用 亚马逊的“ AWS SDK” PHP库 (与插件 bundle在一起)。

在发现这一点时,我发现 DigitalOcean提倡将SDK与自己的产品一起使用,破解一些代码使其工作不会太困难。

为此,我发现插件的工作方式是使用两个类文件(针对每个服务)-
./class/wpmfAddonAws3Admin.php
&
./class/wpmfAws3.php
(对于S3)。

前端功能位于“ admin”文件中; 另一个是与S3 SDK的接口。 简而言之,“管理”文件是通过Ajax或WP前端加载的,其功能会调用S3文件(使用存储的凭据),从而使其能够执行操作(例如同步)到您的S3存储桶。 这很好用,但是要使其与DigitalOcean一起工​​作存在一个主要问题:

endpoint.png

数字海洋是 不可知区域。 这意味着每个请求的作用域都限定于特定区域,而S3则不然。 这本身不是问题(我们的hack仍然可以使用),但是如果您要实现“完整”功能(不同的区域/存储桶),则需要确保必须使用以下命令调用“ non admin”类每次自定义凭据设置。

-

该hack包括以下内容:

a)更改“ admin”文件以将“端点”用于您的DigitalOcean Spaces区域
b)确保始终设置“ us-east-1”区域
c)更改媒体库中每个已同步附件的“附件URL”

-

第一步是更改“ admin”文件中的“ default”选项:

admin.png

从第 34 行开始
./class/wpmfAddonAws3Admin.php
,您将看到为另一个类创建了一组默认设置。 您需要执行以下操作:


  • 将“区域”更改为“ us-east-1”
  • 添加行
    "endpoint" => "https://[[REGION]].digitaloceanspaces.com"



在上述情况下,我们的“区域”是AMS3。 这可能会有所不同,具体取决于您保留空间的位置。

更改此代码实际上并没有多大用处,但是可以确保每次都使用相同的默认值(并且设置了“端点”,这是整个hack的基础)。

-

完成此操作后,我们转到另一个类文件
./class/wpmfAws3.php
:

class.png

如前所述,每次“ admin”类希望与S3 / DO通信时都会调用此方法。

我们在这里要做的是“欺骗”端点,这意味着我们对其进行硬编码。 这将更改 AWS SDK 发送请求的 URL,这意味着我们的 DigitalOcean 凭证应该被接受。 为此,只需分别在第 73 行和第 74 行添加以下两行:

#73 $ args ['region'] ='us-east-1';
#74 $ args ['endpoint'] ='https://ams3.digitaloceanspaces.com';

每次使用任何“管理员”功能时,以上内容都会强制更改“端点”。

通过采用上述详细信息并将其与您存储的S3凭据(在您的情况下为DigitalOcean API密钥)合并,可以使脚本与DO通信。 上面我描述了这是有限的,因为这意味着您只能与单个DO区域通信(我将在一分钟内完全解决)。

-

完成此操作后,我们要做的最后一件事是更改与DO同步的每个附件的“ URL”。

这是在“ admin”类内部的函数“ wpGetAttachmentUrl”(#2048)和“ addMetaInfo”(#1121)中完成的:

1121.png

2048.png

我不确定这些功能中的哪一个真正提供了功能(我相信是#2048),但是无论如何我都更改了它们。

最终,您要做的就是将AWS链接更改为DigitalOcean。 对此黑客有效的工具如下:

#2057返回'https://'。 $ infos ['Bucket']。 '.ams3.digitaloceanspaces.com /'。 str_replace('','%20',$ infos ['Key']));

这会更改 WP 媒体与 DigitalOcean Spaces 的“链接”,该链接应显示在您网站的后端和前端。

--

我将在另一篇文章中详细介绍更广泛的修复方法。
[R
4年前
2. “充分”

如上所述,“完整”修复取决于DigitalOcean与AWS开发工具包的接口方式。

简而言之,S3允许您“连接”然后在任何区域中选择一个存储桶。 DigitalOcean仅允许您与 区域。

如果要实现插件的全部功能(使用DigitalOcean),则需要在“ admin”类中进行很多自定义。 基本上,您需要确保将每个请求都限定在正确的端点范围内,这既耗时又非常昂贵(就API连接而言)。

-

尽管有些松散,但我们已经“做到”了。 我在这里写这篇文章是作为分享进度的一种方式,也许其他人会更喜欢它或其他东西。

--

您需要做4件主要事情才能使其分别工作:

1.创建一个单独的“ DigitalOcean” UI流程
2.删除对S3的任何引用(必要时替换为DigitalOcean)
3.更改某些功能的流程以允许跨区域支持
4.确保DO不干扰S3

-

1.要添加单独的“ DigitalOcean”选项卡,您需要转到原始插件并找到“ cloud.php”文件(./class/pages/settings/cloud.php):

<div id="do" class="tab-content">
    <div class="wpmf_width_100 p-tb-20 wpmf_left top_bar">
        <h1 class="wpmf_left"><?php esc_html_e('DigitalOcean', 'wpmf') ?></h1>
        <?php
        require WP_MEDIA_FOLDER_PLUGIN_DIR . '/class/pages/settings/submit_button.php';
        ?>
    </div>
    <div class="content-box content-wpmf-general">
        <?php
        // phpcs:ignore WordPress.Security.NonceVerification.Missing -- View request, no action
        if (isset($_POST['btn_wpmf_save'])) {
            ?>
            <div class="wpmf_width_100 top_bar saved_infos" style="padding: 20px 0">
                <?php
                require WP_MEDIA_FOLDER_PLUGIN_DIR . '/class/pages/settings/saved_info.php';
                ?>
            </div>
            <?php
        }
        ?>

        <div>
            <div class="wpmf_row_full">
                <?php
                if (is_plugin_active('wp-media-folder-addon/wp-media-folder-addon.php')) {
                    // phpcs:ignore WordPress.Security.EscapeOutput -- Content already escaped in the method
                    echo $html_tabdo;
                }
                ?>
            </div>
        </div>
    </div>
</div>


我只是在S3标签之后添加了它。

为了使其工作,然后需要填充$ html_tabdo变量,这是通过更改两个文件来完成的。

第一个是./class/pages/settings/wp-folder-options.php文件(主要/原始插件):

S3.png

第二个是./class/class-wp-folder-option.php:

html_do.png

这将使用各种DigitalOcean设置填充选项卡。

-

2.要用DO替换S3,您需要确保拥有一套完全不同的文件和队列设置,以确保两个系统不冲突。

这需要做很多事情,主要是创建一组新的“ admin”和“ connection”类。 我不会深入探讨如何执行此操作,但是您基本上想创建一组新的类,这些类创建自己的配置设置,并使用这些设置连接到DO的端点:

api_code.png

-

3.跨区域支持。

如以上文章所述,DO的系统与S3的工作方式不同,因为每个请求的范围都限于特定区域(S3的区域不可知)。

这意味着,如果要使用其他区域的存储桶/空间,则需要进行一些魔术操作才能使其全部正常工作。

我时间不多了,所以这里不介绍全部内容,但是会说,如果您想使系统正常运行,则需要在后端编辑“ ./class/wpmfDo.php”文件-确保您能够传递您希望为以下目的调用SDK实例的“端点”:

endpoint.png

这使我们能够定义不同的“端点”(“区域”;) 当您需要列出不同的空间等时。

当您要列出可用的存储桶时,一个很好的例子就是:

region.png

要实现上述目的,您需要循环浏览DO中所有可用的区域,然后创建一个新的可用存储区阵列。 如您所见,这是创建一个棘手的解决方案:

buckets_list.png

这将从不同区域(而不仅仅是您用于连接的区域)中创建$ list_buckets变量。

-

4. 还没有这样做过

基本上,即使存在S3,您也需要能够使DigitalOcean与S3一起使用。

这将需要使“同步”功能正常工作以及许多其他事情,而我还没有完成。
您好,

此功能最近已在插件中实现。:)

请参阅下面的详细信息。 干杯,
  • 页 :
  • 1
目前还没有回复。