我想将一个新文件上传到Amazon s3到我的测试包。
这是java代码:
AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider());
java.util.Date expiration = new java.util.Date();
long msec = expiration.getTime();
msec += 1000 * 60 * 60; // Add 1 hour.
expiration.setTime(msec);
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest("test-bucket", filename);
generatePresignedUrlRequest.setMethod(HttpMethod.GET);
generatePresignedUrlRequest.setExpiration(expiration);
URL s = s3Client.generatePresignedUrl(generatePresignedUrlRequest);
但是我一直在接受:
"指定的密钥不存在。"对于文件名var。
如何使此代码适用于新文件?
答案 0 :(得分:1)
从外观上看,GeneratePresignedUrlRequest适用于S3中的现有对象。
public GeneratePresignedUrlRequest(String bucketName,String key)
创建一个新请求,用于生成预签名URL,该URL可用作HTTP GET请求的一部分,以访问存储在指定存储桶中指定密钥下的Amazon S3对象。
参数:
bucketName - 包含所需Amazon S3对象的存储桶的名称 key - 存储所需Amazon S3对象的密钥。
您可以使用AmazonS3Client类中的putObject
方法之一。
PutObjectResult putObject(PutObjectRequest putObjectRequest)
将新对象上载到指定的Amazon S3存储桶。PutObjectResult putObject(String bucketName,String key,File file)
在指定的存储桶和密钥名称下将指定的文件上载到Amazon S3。PutObjectResult putObject(String bucketName,String key,InputStream input,ObjectMetadata metadata)
在指定的存储桶和密钥名称下将指定的输入流和对象元数据上载到Amazon S3。
将对象放入S3后,您可以使用该密钥实例化GeneratePresignedUrlRequest对象并获取URL。
答案 1 :(得分:0)
或者,您可以使用minio-java客户端库,其开源并与AWS S3 API兼容。
您可以查看PresignedPutObject.java示例。
import io.minio.MinioClient; import io.minio.errors.MinioException; import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.security.InvalidKeyException; import org.xmlpull.v1.XmlPullParserException; public class PresignedPutObject { public static void main(String[] args) throws NoSuchAlgorithmException, IOException, InvalidKeyException, XmlPullParserException, MinioException { // Note: YOUR-ACCESSKEYID, YOUR-SECRETACCESSKEY and my-bucketname are // dummy values, please replace them with original values. // Set s3 endpoint, region is calculated automatically MinioClient s3Client = new MinioClient("https://s3.amazonaws.com", "YOUR-ACCESSKEYID", "YOUR-SECRETACCESSKEY"); String url = s3Client.presignedPutObject("my-bucketname", "my-objectname", 60 * 60 * 24); System.out.println(url); } }
希望它有所帮助。
免责声明:我为Minio
工作