package com.example.oss;
import com.aliyun.oss.HttpMethod;
import com.aliyun.oss.common.auth.Credentials;
import com.aliyun.oss.common.auth.DefaultCredentials;
import com.aliyun.oss.common.auth.RequestSigner;
import com.aliyun.oss.common.comm.RequestMessage;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.internal.OSSHeaders;
import com.aliyun.oss.internal.signer.OSSSignerParams;
import com.aliyun.oss.internal.signer.OSSV4Signer;
import java.net.URI;
import java.net.URISyntaxException;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.temporal.ChronoUnit;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
public class OSSSignHeaderV4D3 {
public static void main(String[] args) throws URISyntaxException {
LocalDateTime currentTime = LocalDateTime.now();
LocalDateTime futureTime = currentTime.plus(2, ChronoUnit.HOURS);
LocalDateTime futureTimeTruncated = futureTime.truncatedTo(ChronoUnit.SECONDS);
Date futureDate = Date.from(futureTimeTruncated.atZone(ZoneId.systemDefault()).toInstant());
String endpoint = "https://oss-cn-chengdu.aliyuncs.com";
String accessKeyId = "";
String accessKeySecret = "";
String token = "";
String bucketName = "zxxxx";
String objectName = "1736876762696_976418FFFF.jpg";
String resourcePath = "/zxxxx/1736876762696_976418FFFF.jpg";
String url = "https://"+bucketName+".oss-cn-chengdu.aliyuncs.com/";
Credentials credentials = new DefaultCredentials(accessKeyId,accessKeySecret,token);
Set<String> additionalHeaderNames = new HashSet<>();
additionalHeaderNames.add("host");
additionalHeaderNames.add("x-oss-security-token");
OSSSignerParams ossSignerParams = new OSSSignerParams(resourcePath,credentials);
ossSignerParams.setProduct("oss");
ossSignerParams.setRegion("cn-chengdu");
ossSignerParams.setExpiration(futureDate);
ossSignerParams.setAdditionalHeaderNames(additionalHeaderNames);
RequestSigner requestSigner = OSSV4Signer.createRequestSigner(SignVersion.V4, ossSignerParams);
RequestMessage requestMessage = new RequestMessage(bucketName, objectName);
requestMessage.setMethod(HttpMethod.GET);
URI enp =new URI(endpoint);
requestSigner.sign(requestMessage);
System.out.println("Authorization:"+requestMessage.getHeaders().get(OSSHeaders.AUTHORIZATION));
System.out.println("x-oss-date:"+requestMessage.getHeaders().get(OSSHeaders.OSS_DATE));
System.out.println("x-oss-security-token:"+requestMessage.getHeaders().get("x-oss-security-token"));
System.out.println("URL:"+url+objectName);
}
}