2016-05-05 12 views
1

Swift Object Speicher können Sie eine temporäre URL für jede Ressource mit einem Ablaufdatum erstellen. Dies kann mit einer schnellen CLI-Befehlszeile erreicht werden. Um diese Funktionalität in einer Webanwendung zu nutzen, muss ich die temporäre URL mit API-Aufruf erstellen, damit ich einen Rest CALL machen kann und die temporäre URL, die später in HTML eingebettet werden kann, und Ressourcen, die von uns heruntergeladen werden Browser direkt.Wie temporäre URL für Swift-Objektspeicher mit REST-API erstellen?

Aus der Dokumentation sehe ich keine API dafür erwähnt? Wer weiß, wie ich es von Java mit API-Aufruf bekommen kann.

Dank Manoj

Antwort

2

Es gibt keine direkte API für Swift Objekte temporäre URL zu erzeugen, zur Verfügung. Stattdessen hat sie von Client-Seite erzeugt mit Hilfe von X-Konto-Meta-Temp-URL-Key geheimem Schlüssel gemäß in this document beschrieben

Hier ist die Python-Version von Code zu generieren. Beziehen Sie sich darauf, es in Java neu zu implementieren, und dann kann es überall eingebettet werden.

import hmac 
from hashlib import sha1 
from time import time 
method = 'GET' 
duration_in_seconds = 60*60*24 
expires = int(time() + duration_in_seconds) 
path = '/v1/AUTH_a422b2-91f3-2f46-74b7-d7c9e8958f5d30/container/object' 
key = 'mykey' 
hmac_body = '%s\n%s\n%s' % (method, expires, path) 
sig = hmac.new(key, hmac_body, sha1).hexdigest() 
s = 'https://{host}/{path}?temp_url_sig={sig}&temp_url_expires={expires}' 
url = s.format(host='swift-cluster.example.com', path=path, sig=sig, expires=expires) 

Hier ist ein another reference, die eine Anpassung an den Openstack Horizon getan ist eine UI-Funktion bieten schnelle Objekte temporäre URL zu generieren.

+0

Nach c Wenn ich das Obige auf Java übertrage, funktioniert das vollkommen in Ordnung für mich. Danke vielmals. –

1

Für andere Menschen für die Antwort in Java suchen, Unten finden Sie das Code-Snippet die hmac in java

import java.security.InvalidKeyException; 
import java.security.NoSuchAlgorithmException; 
import java.security.SignatureException; 
import java.util.Formatter; 

import javax.crypto.Mac; 
import javax.crypto.spec.SecretKeySpec; 

private static final String HMAC_SHA1_ALGORITHM = "HmacSHA1"; 

     private static String toHexString(byte[] bytes) { 
      Formatter formatter = new Formatter(); 

      for (byte b : bytes) { 
       formatter.format("%02x", b); 
      } 

      return formatter.toString(); 
     } 

     public static String calculateRFC2104HMAC(String data, String key) 
      throws SignatureException, NoSuchAlgorithmException, InvalidKeyException 
     { 
      SecretKeySpec signingKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM); 
      Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM); 
      mac.init(signingKey); 
      return toHexString(mac.doFinal(data.getBytes())); 
     } 

Der obige Code wird von https://gist.github.com/ishikawa/88599

Verwenden hmac die temporäre zu schaffen gemacht zu bekommen URL wie nach dem unten angegebenen Code

Long expires = (System.currentTimeMillis()/1000)+ <expiry in seconds>; 
String tempURL=""+baseURL+path+"?temp_url_sig="+hmac+"& temp_url_expires="+expires; 

Dank