package com.fr.plugin.file.submit.oss.fun; import com.aliyun.oss.HttpMethod; import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.GeneratePresignedUrlRequest; import com.fr.data.NetworkHelper; import com.fr.decision.fun.impl.BaseHttpHandler; import com.fr.plugin.oss.universal.config.OssUniversalConfig; import com.fr.stable.StableUtils; import com.fr.third.springframework.web.bind.annotation.RequestMethod; import com.fr.web.utils.WebUtils; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter; import java.net.URL; import java.util.Calendar; import java.util.Date; public class OssDownloadHttpHandler extends BaseHttpHandler { @Override public RequestMethod getMethod() { return RequestMethod.POST; } @Override public String getPath() { return "/oss/download"; } @Override public boolean isPublic() { return true; } @Override public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { String bucket = NetworkHelper.getHTTPRequestParameter(req, "bucket"); String directory = NetworkHelper.getHTTPRequestParameter(req, "directory"); String fileName = NetworkHelper.getHTTPRequestParameter(req, "fileName"); PrintWriter writer = WebUtils.createPrintWriter(res); writer.write(createDownloadUrl(bucket, directory, fileName)); writer.flush(); writer.close(); } private String createDownloadUrl(String bucket, String directory, String fileName) throws Exception { // 创建OSSClient实例。 OSSClient ossClient = new OSSClient( OssUniversalConfig.getInstance().getEndPoint(), OssUniversalConfig.getInstance().getAccessKeyId(), OssUniversalConfig.getInstance().getRealAccessKeySecret()); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MINUTE, 1); Date expiration = calendar.getTime(); String key = StableUtils.pathJoin(directory, fileName); GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, key, HttpMethod.GET); // 设置过期时间。 request.setExpiration(expiration); // 生成签名URL(HTTP GET请求)。 URL signedUrl = ossClient.generatePresignedUrl(request); ossClient.shutdown(); return signedUrl.toString(); } }