HTML代码如下
<form action="OSSServlet" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上传">
</form>
Servlet代码如下
package servlet;
import utils.AliOssUtil;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.PrintWriter;
@javax.servlet.annotation.WebServlet(name = "OSSServlet", urlPatterns = "/OSSServlet")
@MultipartConfig
public class OSSServlet extends javax.servlet.http.HttpServlet {
public OSSServlet() {
super();
// TODO Auto-generated constructor stub
}
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=UTF-8");
Part part = request.getPart("file");
String url = AliOssUtil.upload(part);
PrintWriter out = response.getWriter();
out.print(url);
}
}
java代码
package utils;
import java.io.IOException;
import java.security.SecureRandom;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.Part;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.ObjectMetadata;
public class AliOssUtil {
// Endpoint以杭州为例,其它Region请按实际情况填写。
private static final String endpoint = "https://oss-accelerate.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
private static final String accessKeyId = "";
private static final String accessKeySecret = "";
private static final String bucketName = "";//存储空间名称
public static String upload(Part file) throws IOException {
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
System.out.println(ossClient);
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
// 获取文件名
String fileName = file.getSubmittedFileName();
// 获取文件后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
// 最后上传生成的文件名
String finalFileName = System.currentTimeMillis() + "" + new SecureRandom().nextInt(0x0400) + suffixName;
// oss中的文件夹名
String objectName = sdf.format(new Date()) + "/" + finalFileName;
// 创建上传文件的元信息,可以通过文件元信息设置HTTP header(设置了才能通过返回的链接直接访问)。
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType("image/jpg");
// 文件上传
ossClient.putObject(bucketName, objectName, file.getInputStream(), objectMetadata);
// 设置URL过期时间为1小时。
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
String url = ossClient.generatePresignedUrl(bucketName, objectName, expiration).toString();
ossClient.shutdown();
return url;
}
}