Ga naar hoofdinhoud
  Dinsdag 14 januari 2020
  6 Antwoorden
  3.1K bezoeken
  Inschrijven
Hallo,

is het compatibel met DigitalOceanSpaces en andere S3-achtige platforms?

En is het compatibel met Flatsome UX Builder

? Bedankt!
EEN
5 jaar geleden
Hoi,

Bedankt dat u hier contact met ons heeft opgenomen over deze extensie.

is het compatibel met DigitalOceanSpaces en andere S3-achtige systemen?

Wij ondersteunen Digital Ocean nog niet, u kunt momenteel Amazon S3 gebruiken: Voor meer informatie:

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

En is het compatibel met Flatsome UX Builder?

Ja, het is compatibel met bijna alle pagina-builders.

Hoop dat het helpt!
Proost,
W
5 jaar geleden
Hoi,

bedankt voor je antwoord.

Omdat DO S3-compatibel is, werkt het misschien met DO-referenties en serveradres. Nee, toch?:) Heb je het geprobeerd?
EEN
5 jaar geleden
Hoi,

Bedankt dat u contact met mij opneemt met meer informatie.

aangezien DO S3 compatibel is, werkt het misschien met DO-referenties en serveradres?:) Heb je het geprobeerd?


Wij hebben het niet met DO getest en ik denk dat het niet mogelijk is.

Proost,
R
5 jaar geleden
Je kunt het gebruiken met DigitalOcean. Er is een eenvoudige truc om het werkend te krijgen:

digitaleocean.png

Omdat ik het net voor een klant heb gedaan, zal ik de hack in detail beschrijven en daarna afzonderlijk uitleggen hoe je het werkend krijgt.

--

Hoewel het nog niet 100% werkt, hebben we al aanzienlijke vooruitgang geboekt:

1. Hack

DigitalOcean Spaces is gebouwd rond de API van S3 en maakt gebruik van De PHP-bibliotheek "AWS SDK" van Amazon (die bij de plugin is bundle).

Toen ik dit ontdekte, besefte ik dat sinds DigitalOcean promoot het gebruik van de SDK met zijn eigen productzou het niet zo moeilijk zijn om een ​​deel van de code te hacken om het werkend te krijgen.

Om dit te doen, ontdekte ik dat de plugin werkt met twee klassebestanden (voor elke service) -
./class/wpmfAddonAws3Admin.php
&
./class/wpmfAws3.php
(voor S3).

Het "admin"-bestand bevat de front-endfunctionaliteit; het andere is bedoeld voor de interface met de S3 SDK. Kortom, het "admin"-bestand wordt geladen via Ajax of de WP front-end, en de functionaliteit ervan roept het S3-bestand aan (met behulp van opgeslagen inloggegevens), waardoor het acties (zoals synchronisatie) met je S3-bucket kan uitvoeren. Dit werkt uitstekend, maar er is één groot probleem om het met DigitalOcean te laten werken:

eindpunt.png

DigitalOcean is NIET Regio-agnostisch. Dit betekent dat elk verzoek is gericht op een specifieke regio, terwijl dat bij S3 niet het geval is. Dit is op zich geen probleem (onze hack werkt nog steeds), maar als u "volledige" functionaliteit wilt bereiken (verschillende regio's/buckets), moet u ervoor zorgen dat u elke keer de klasse "non-admin" met aangepaste referentie-instellingen aanroept.

-

De hack bestaat uit het volgende:

a) Wijzig het bestand "admin" om het "eindpunt" voor uw DigitalOcean Spaces-regio te gebruiken
b) Zorg ervoor dat de regio 'us-east-1' te allen tijde is ingesteld
c) Wijzig de "bijlage-URL" voor elk van de gesynchroniseerde bijlagen in uw mediabibliotheek

-

De eerste stap is het wijzigen van de standaardopties in het bestand 'admin':

admin.png

Beginnend bij regel 34 van
./class/wpmfAddonAws3Admin.php
, ziet u dat er een set standaardinstellingen voor de andere klasse is gemaakt. U moet het volgende doen:


  • Verander de "regio" naar 'us-east-1'
  • Voeg de lijn toe
    "endpoint" => "https://[[REGION]].digitaloceanspaces.com"



In bovenstaand geval is onze "regio" AMS3. Dit kan verschillen afhankelijk van de locatie waar uw ruimte zich bevindt.

Het veranderen van deze code doet niet zoveel, maar zorgt er wel voor dat iedere keer dezelfde standaardinstellingen worden gebruikt (en dat het "eindpunt" wordt ingesteld, wat de basis is van de hele hack).

-

Nadat we dit hebben gedaan, gaan we naar het andere klassebestand
./class/wpmfAws3.php
:

klasse.png

Zoals gezegd wordt dit elke keer aangeroepen wanneer de klasse "admin" wil communiceren met S3/DO.

Wat we hier gaan doen is het eindpunt "spoofen", wat betekent dat we het hardcoderen. Dit verandert de URL waarnaar de AWS SDK verzoeken stuurt, wat betekent dat onze DigitalOcean-referenties geaccepteerd zouden moeten worden. Om dit te doen, voegt u simpelweg de volgende twee regels toe op respectievelijk regel 73 en 74:

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

Als u bovenstaande handelingen uitvoert, wordt het 'eindpunt' telkens gewijzigd wanneer u de 'beheer'-functionaliteit gebruikt.

Het werkt door de bovenstaande gegevens te combineren met je opgeslagen S3-referenties (in jouw geval de DigitalOcean API-sleutel), waardoor het script met DO kan communiceren. Ik heb hierboven beschreven dat dit beperkt is, omdat je dan slechts met één DO-regio kunt communiceren (iets waar ik zo meteen uitgebreid op inga).

-

Hierna moeten we als laatste de "URL" voor elke bijlage die met DO is gesynchroniseerd, wijzigen.

Dit gebeurt binnen de klasse "admin", in de functies "wpGetAttachmentUrl" (#2048) en "addMetaInfo" (#1121):

1121.png

2048.png

Ik weet niet zeker welke van deze functies daadwerkelijk de gewenste functionaliteit biedt (ik geloof dat het #2048 is), maar ik heb ze toch allebei gewijzigd.

Uiteindelijk verander je alleen de AWS-link naar een DigitalOcean-link. De volgende werkte goed voor deze hack:

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

Hiermee verandert u de 'link' van de WP-media naar DigitalOcean Spaces, waardoor deze in de backend en frontend van uw site wordt weergegeven.

--

Ik zal de bredere oplossing in een ander bericht toelichten.
R
5 jaar geleden
2. "Vol"

Zoals hierboven vermeld, is de "volledige" oplossing afhankelijk van hoe DigitalOcean communiceert met de AWS SDK.

Simpel gezegd, met S3 kunt u 'verbinding maken' en vervolgens een bucket in elke regio kiezen; DigitalOcean staat u alleen toe verbinding te maken en te interacteren met een enkel regio elke keer.

Als je de volledige functionaliteit van de plugin (met DigitalOcean) wilt benutten, moet je veel aanpassen in de "admin"-klasse. Je moet er in principe voor zorgen dat ELKE aanvraag is gekoppeld aan het juiste eindpunt, wat zowel tijdrovend als duur is (in termen van API-verbindingen).

-

We hebben dit "min of meer" aan de praat gekregen, zij het in beperkte mate. Ik schrijf dit hier om de voortgang te delen, en misschien wil iemand anders het wel oppakken of zoiets.

--

Om het afzonderlijk werkend te krijgen, moet u vier belangrijke dingen doen:

1. Maak een aparte "DigitalOcean" UI-stroom
2. Verwijder alle verwijzingen naar S3 (vervang ze indien nodig door DigitalOcean)
3. Wijzig de stroom van bepaalde functies om ondersteuning tussen regio's mogelijk te maken
4. Zorg ervoor dat DO geen interferentie veroorzaakt met S3

-

1. Om een ​​apart tabblad "DigitalOcean" toe te voegen, moet u naar de originele plugin gaan en het bestand "cloud.php" (./class/pages/settings/cloud.php) zoeken:

<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>


Ik heb het gewoon toegevoegd na het S3-tabblad.

Om dit te laten werken, moet de variabele $html_tabdo worden gevuld. Dit doet u door twee bestanden te wijzigen.

Het eerste is het bestand ./class/pages/settings/wp-folder-options.php (hoofd-/oorspronkelijke plugin):

S3.png

De tweede is ./class/class-wp-folder-option.php:

html_do.png

Het tabblad wordt dan gevuld met de verschillende DigitalOcean-instellingen.

-

2. Om S3 te vervangen door DO, moet u ervoor zorgen dat u over een compleet andere set bestanden en wachtrij-instellingen beschikt, zodat de twee systemen niet met elkaar in conflict komen.

Hiervoor zijn een aantal dingen nodig, waaronder het aanmaken van een nieuwe set 'admin'- en 'connection'-klassen. Ik zal niet in detail treden over hoe je dit doet, maar je wilt in principe een nieuwe set klassen aanmaken die hun eigen configuratie-instellingen creëren en die gebruiken om verbinding te maken met de eindpunten voor DO:

api_code.png

-

3. Ondersteuning voor meerdere regio's.

Zoals in het bericht hierboven vermeld, werkt het systeem van DO anders dan dat van S3, in die zin dat elk verzoek is gericht op een specifieke regio (dat van S3 is regio-agnostisch).

Dit betekent dat als je met buckets/ruimtes uit andere regio's wilt werken, je een trucje moet toepassen om alles samenwerkend te krijgen.

Ik heb weinig tijd, dus ik kan hier niet alles bespreken, maar ik wil wel zeggen dat als je het systeem werkend wilt krijgen, je het bestand "./class/wpmfDo.php" in de backend moet bewerken. Zorg ervoor dat je het "eindpunt" kunt doorgeven waarvoor je de SDK-instantie wilt aanroepen...

eindpunt.png

Dit geeft ons de mogelijkheid om verschillende "eindpunten" ("regio's") te definiëren;) voor wanneer u verschillende ruimtes etc. moet vermelden.

Een goed voorbeeld hiervan is wanneer u de beschikbare buckets wilt weergeven:

regio.png

Om bovenstaande te bereiken, moet u door alle beschikbare regio's in DO heen bladeren en vervolgens een nieuwe reeks beschikbare buckets aanmaken. Zoals u zult begrijpen, was dit een lastige oplossing om te creëren:

buckets_list.png

Hiermee wordt de variabele $list_buckets aangemaakt vanuit de verschillende regio's (niet alleen de regio waarmee u verbinding hebt gemaakt).

-

4. Heb dit nog niet gedaan

In principe moet u DigitalOcean met S3 kunnen laten werken, zelfs als S3 aanwezig is.

Hiervoor moet ik de synchronisatiefunctionaliteit en een aantal andere dingen regelen, maar dat heb ik nog niet afgerond.
T
3 jaar geleden
Hallo,

deze functie is onlangs in de plugin geïmplementeerd. Zie de details hieronder.:)

Groeten,
  • Bladzijde :
  • 1
Er zijn nog geen antwoorden op dit bericht.