Hoppa till huvudinnehåll
  Tisdagen den 14 januari 2020
  6 svar
  3.1K besök
  Prenumerera
Hej,

är det kompatibelt med digitalocean spaces och andra S3-gillar?

Och är det kompatibelt med flatsome UX Builder

Tack!
EN
5 år sedan
Hej,

Tack för att du kontaktar oss här angående detta tillägg.

är det kompatibelt med digitalocean spaces och andra S3-gillar?

Vi har inte stöd för Digital Ocean ännu, du kan använda Amazon S3 för närvarande: För mer information:

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

Och är det kompatibelt med flatsome UX Builder

Ja, det är kompatibelt med nästan sidbyggare.

Hoppas det hjälper!
Skål,
W
5 år sedan
Hej,

tack för ditt svar.

eftersom DO är S3-kompatibelt kanske det fungerar med DO-uppgifter och serveradress, eller hur?:) provade du det?
EN
5 år sedan
Hej,

Tack för att du återkommer med mer information.

eftersom DO är S3-kompatibelt kanske det fungerar med DO-uppgifter och serveradress, eller hur?:) provade du det?


Vi har inte testat med DO och jag tror att det inte är möjligt.

Skål,
R
5 år sedan
Du kan använda den med DigitalOcean, det finns ett enkelt hack för att få det att fungera:

digitalocean.png

Eftersom jag precis gjorde det för en kund, ska jag detaljera hacket och sedan förklara hur du skulle få det att fungera separat.

--

Även om vi inte har fått det till 100 % att fungera ännu, har vi gjort betydande framsteg:

1. Häck

DigitalOcean Spaces är byggt kring S3:s API och använder Amazons "AWS SDK" PHP-bibliotek (som är bundled med plugin).

När jag upptäckte detta kom jag på att sedan dess DigitalOcean främjar användning av SDK med sin egen produkt, att hacka en del av koden för att få det att fungera skulle inte vara alltför svårt.

För att göra detta upptäckte jag att plugin-programmet fungerar med två klassfiler (för varje tjänst) -
./class/wpmfAddonAws3Admin.php
&
./class/wpmfAws3.php
(för S3).

"admin"-filen är där front-end-funktionaliteten ligger; den andra är för gränssnitt med S3 SDK. Kort sagt, "admin"-filen laddas via Ajax eller WP-gränssnittet, och dess funktionalitet anropar S3-filen (med hjälp av lagrade referenser), vilket gör att den kan utföra åtgärder (som synkronisering) till din S3-bucket. Detta fungerar mycket bra, men det finns ett stort problem med att få det att fungera med DigitalOcean:

endpoint.png

DigitalOcean är INTE regionagnostiker. Detta innebär att varje begäran är scoped till en specifik region, medan S3:s inte är det. Detta är inte ett problem i sig (vårt hack kommer fortfarande att fungera), men om du vill uppnå "full" funktionalitet (olika regioner/hinkar), måste du se till att du måste anropa klassen "icke admin" med anpassade autentiseringsinställningar varje gång.

-

Hacket består av följande:

a) Ändra "admin"-filen för att använda "endpoint" för din DigitalOcean Spaces-region
b) Se till att "us-east-1"-regionen alltid är inställd
c) Ändra "bilaga URL" för var och en av de synkroniserade bilagorna i ditt mediebibliotek

-

Det första steget är att ändra "default"-alternativen i "admin"-filen:

admin.png

Börjar på rad 34 av
./class/wpmfAddonAws3Admin.php
, kommer du att se att en uppsättning standardinställningar skapas för den andra klassen. Du måste göra följande:


  • Ändra "region" till "us-east-1"
  • Lägg till raden
    "endpoint" => "https://[[REGION]].digitaloceanspaces.com"



I fallet ovan är vår "region" AMS3. Detta kan vara olika beroende på var ditt utrymme förvaras.

Att ändra den här koden gör egentligen inte så mycket, men säkerställer att samma standardvärden används varje gång (och att "slutpunkten" är inställd, vilket är grunden för hela hacket).

-

Efter att ha gjort detta går vi sedan till den andra klassfilen
./class/wpmfAws3.php
:

class.png

Detta, som nämnts, anropas varje gång "admin"-klassen vill kommunicera med S3/DO.

Vad vi ska göra här är att "spoofa" slutpunkten, vilket betyder att vi hårdkodar den. Detta kommer att ändra webbadressen som AWS SDK skickar förfrågningar till, vilket innebär att våra DigitalOcean-uppgifter bör accepteras. För att göra det, lägg helt enkelt till följande två rader på rad 73 respektive 74:

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

Ovanstående tvingar "slutpunkten" att ändras varje gång du använder någon av "admin"-funktionerna.

Det fungerar genom att ta ovanstående detaljer och slå samman dem med dina lagrade S3-uppgifter (i ditt fall DigitalOcean API-nyckel), vilket gör att skriptet kan kommunicera med DO. Jag beskrev ovan att detta är begränsat eftersom det betyder att du bara kan kommunicera med en enda DO-region (något jag kommer att ta upp fullständigt inom en minut).

-

Efter att ha gjort detta är det sista vi behöver göra att ändra "URL" för var och en av de bilagor som synkroniseras med DO.

Detta görs i klassen "admin", i funktionerna "wpGetAttachmentUrl" (#2048) och "addMetaInfo" (#1121):

1121.png

2048.png

Jag är inte säker på vilken av dessa funktioner som faktiskt tillhandahåller funktionen (jag tror att det är #2048), men jag ändrade dem båda ändå.

I slutändan är allt du gör att ändra AWS-länken till en DigitalOcean. Den som fungerade bra för detta hack var följande:

#2057 returnera 'https://'. $infos['Bucket'] . '.ams3.digitaloceanspaces.com/' . str_replace(' ', '%20', $infos['Nyckel']);

Detta ändrar "länken" som WP-media har till DigitalOcean Spaces, som ska visa den i backend och frontend på din webbplats.

--

Jag kommer att beskriva den bredare lösningen i ett annat inlägg.
R
5 år sedan
2. "Full"

Som nämnts ovan är den "fullständiga" fixen beroende av hur DigitalOcean gränssnitt med AWS SDK.

Enkelt uttryckt låter S3 dig "ansluta" och sedan välja en hink i vilken region som helst; DigitalOcean tillåter dig endast att ansluta och interagera med en enda region varje gång.

Om du ville uppnå full funktionalitet av plugin (med DigitalOcean), finns det mycket anpassning som måste ske i klassen "admin". Du måste i princip se till att VARJE begäran är scoped till rätt slutpunkt, vilket är både tidskrävande och ganska dyrt (i termer av API-anslutningar).

-

Vi har "typ" fått det här att fungera, om än löst. Jag skriver detta här som ett sätt att dela framstegen, och kanske någon annan skulle föredra att ta upp det eller något.

--

Du måste göra fyra viktiga saker för att få det att fungera separat:

1. Skapa ett separat "DigitalOcean" UI-flöde
2. Ta bort alla referenser till S3 (ersätt med DigitalOcean vid behov)
3. Ändra flödet av vissa funktioner för att tillåta stöd över regioner
4. Se till att DO inte stör S3

-

1. För att lägga till en separat "DigitalOcean"-flik måste du gå till det ursprungliga plugin-programmet och hitta filen "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>


Jag lade precis till det efter S3-fliken.

För att få det att fungera behöver du sedan $html_tabdo-variabeln fyllas i, vilket görs genom att ändra två filer.

Den första är filen ./class/pages/settings/wp-folder-options.php (huvud/original plugin):

S3.png

Den andra är ./class/class-wp-folder-option.php:

html_do.png

Detta kommer att fylla fliken med de olika DigitalOcean-inställningarna.

-

2. För att ersätta S3 med DO måste du se till att du har en helt annan uppsättning filer och köinställningar för att säkerställa att de två systemen inte kommer i konflikt.

Detta kräver att man gör ett antal saker, främst att skapa en ny uppsättning "admin" och "connection" klasser. Jag kommer inte att gå in på djupet av hur man gör detta, men du vill i princip skapa en ny uppsättning klasser som skapar sina egna konfigurationsinställningar och använda dem för att ansluta till slutpunkterna för DO:

api_code.png

-

3. Stöd över regioner.

Som nämnts i inlägget ovan, fungerar DO:s system annorlunda än S3, genom att varje begäran är scoped till en specifik region (S3:s är regionagnostisk).

Det betyder att om du vill arbeta med hinkar/utrymmen från andra regioner måste du arbeta med lite magi för att få det hela att fungera tillsammans.

Jag får ont om tid, så jag kommer inte att täcka hela grejen här, men kommer att säga att om du vill få systemet att fungera måste du redigera filen "./class/wpmfDo.php" i backend - se till att du kan passera "slutpunkten" du vill anropa instansen av SDK för...

endpoint.png

Detta ger oss möjlighet att definiera olika "ändpunkter" ("regioner";) för när du behöver lista olika utrymmen osv.

Ett bra exempel på detta är när du vill lista de tillgängliga hinkarna:

region.png

För att uppnå ovanstående måste du gå igenom alla regioner som är tillgängliga i DO och sedan skapa en ny uppsättning av tillgängliga hinkar. Som du förstår var det här en knepig lösning att skapa:

buckets_list.png

Detta skapar variabeln $list_buckets från de olika regionerna (inte bara den du brukade ansluta till).

-

4. Har inte gjort detta än

I grund och botten måste du kunna få DigitalOcean att fungera med S3, även när S3 finns.

Detta kommer att kräva att "synkroniserings"-funktionen fungerar och ett antal andra saker, som jag inte har slutfört ännu.
T
Hej,

Den här funktionen har nyligen implementerats i plugin-programmet. Se detaljerna nedan.:)

Skål,
  • Sida:
  • 1
Det finns inga svar på det här inlägget än.