1

JetS3t 在 Java 8 中无法获取现有 S3 对象的 LastModifiedDate,但在 Java 7 中成功。

package JsTest

import org.jets3t.service.S3Service;
import org.jets3t.service.ServiceException;
import org.jets3t.service.impl.rest.httpclient.RestS3Service;
import org.jets3t.service.model.S3Object;
import org.jets3t.service.security.AWSCredentials;

public class Jetsettester {

public static void main(String[] args) {
    String awsAccessKey = "<access_key>";
    String awsSecretKey = "<secret>";
    AWSCredentials awsCredentials = new AWSCredentials(awsAccessKey, awsSecretKey);
    S3Service s3Service = new RestS3Service(awsCredentials);
    try {
        S3Object objectDetailsOnly = (S3Object) s3Service.getObjectDetails("ENTER_BUCKET_NAME", "EXISTING_SAMPLE_KEY.TXT");
        Object md = objectDetailsOnly.getMetadata("Last-Modified"); // Object type is 'String' in Java 8 - and 'Date' in Java 7
        Date dt = objectDetailsOnly.getLastModifiedDate(); // Hence, raises ClassCastException only in Java 8 . In Java 7 - it is correct Date class
    } catch (ServiceException e) {
        e.printStackTrace();
    }
}
}
  1. 确保 Amazon S3 中存在存储桶和密钥。将其与 AWS 密钥和密钥一起添加到下面的代码中
  2. 使用 Java 7 运行上面的代码就成功了。更具体地说,Object md 的返回类型是 String 类型,Date dt 的返回类型是 Date。
  3. 使用 Java 8 重复它失败并出现 ClassCastException。更具体地说,JetS3t 正在返回一个字符串日期 - 而不是 Date 对象。

我认为有两个标题值 - 一个用于“Last-Modified”,另一个用于小写“last-modified”,但我不知道更多。有人可以帮忙吗?

4

1 回答 1

0

这是JetS3t 0.9.3. 我提出了这个错误,James Murty 去年在发布时慷慨地修复了它,在0.9.4 这里发布它以防其他人遇到它。jets3t 的详细信息bitbucket 错误链接

于 2016-02-02T04:57:21.090 回答