簡體   English   中英

使用Rest API通過versionId刪除Amazon s3對象

[英]Delete amazon s3 object by versionId using rest API

我正在嘗試使用rest API刪除Amazon s3對象,但未獲得任何成功。 我已經使用Java在服務器端創建了URL(簽名URL),然后在客戶端(即從瀏覽器)向該URL發出了XHR請求。

我用來簽署網址的Java代碼:

    public static String getSignedURL(String fileName, int fileOwnerId, String versionId){
    Date expiration = new Date();
    long milliSeconds = expiration.getTime();
    milliSeconds += 1000 * 60 * 10; // Add 10 minutes.
    long seconds = (milliSeconds)/1000L;
    String URL = null;

    try {
        String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
        String canonicalizedResource = "/"+AWS_BUCKET_NAME+"/" + fileOwnerId + "/" + encodedFileName;
        String stringToSign = "DELETE\n\n\n" + seconds + "\n" + canonicalizedResource +"?versionId="+versionId;
        byte[] keyBytes = AWS_SECRET_API_KEY.getBytes();
        SecretKeySpec signingKey = new SecretKeySpec(keyBytes, "HmacSHA1");

        Mac mac = Mac.getInstance("HmacSHA1");
        mac.init(signingKey);

        byte[] digest = mac.doFinal(stringToSign.getBytes());
        byte[] base64bytes = Base64.encodeBase64(digest);
        String signedString = new String(base64bytes, "UTF-8");

        String signature = URLEncoder.encode(signedString, "UTF-8");

        URL = "https://"+AWS_BUCKET_NAME+".s3.amazonaws.com/" + fileOwnerId +
                "/" + encodedFileName +"?versionId="+versionId +"&Expires=" + seconds+"&AWSAccessKeyId=" +
                AWS_ACCESS_KEY + "&Signature=" + signature;
    } catch (UnsupportedEncodingException ex) {
        Logger.getLogger(Utilities.class.getName()).log(Level.SEVERE, null, ex);
    } catch (NoSuchAlgorithmException nsae) {

    } catch (InvalidKeyException ike) {

    }

    System.out.println("URL IS :"+URL);
    return URL;
}

在客戶端:

    var xhr = new XMLHttpRequest();

    xhr.addEventListener("load", deleteComplete, false);

    xhr.open('DELETE', URL_GENERATED_FROM_SERVER, true); 

    xhr.setRequestHeader ("Access-Control-Allow-Origin", "*");

    xhr.send();

使用此代碼從amazon s3存儲桶下載對象可以很好地解決此問題,方法是將“ DELETE”請求替換為“ GET”。 但是刪除不起作用。 我進行了很多搜索,但其余API的可用幫助卻很少。

最后,我集成了aws sdk以便從Amazon s3存儲桶中刪除該對象,其工作方式類似於閃電。 但是無法獲得其他API的幫助。 因此,現在我已使用rest API進行上傳和下載,並使用sdk刪除對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM