前言
今天,在做一个需要用到图片上传的业务的时候,用到的一个需要对接七牛云对象存储。现在将其记录下来,便于日后翻阅。
主要用于通过httpservlet上传文件,然后直接存入七牛云的对象存储中。
过程
直接上代码,下面的代码是经过封装后的。
首先是httpservlet部分的代码
@WebServlet("/api/upload")
@MultipartConfig
public class UpLoad extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Part filePart = request.getPart("file");
FileMethods fileMethods = new FileMethods();
System.out.println(fileMethods.UpLoadFile(filePart));
}
}
下面是经过封装后的UpLoadFile 文件,返回的是文件的文件的名字。
/**
* 传入文件信息
* @return 返回文件名字
*/
public String UpLoadFile(Part filePart)throws ServletException, IOException{
long serialVersionUID = 1L;
// 七牛云Access Key
String ACCESS_KEY = 填ACCESS_KEY;
// 七牛云Secret Key
String SECRET_KEY = 填SECRET_KEY;
// 七牛云存储空间名称
String BUCKET_NAME = 填BUCKET_NAME;
// 七牛云存储空间域名 要求完整网址
String BASE_URL = 填BASE_URL;
//接下来开始获取文件后缀
String hz = filePart.getSubmittedFileName();
String[] parts = hz.split("\\."); // 使用正则表达式分割文件名和后缀
String fileExtension = parts[parts.length - 1]; // 获取最后一个部分,即后缀
InputStream inputStream=null;
// 获取上传的文件流
try{
inputStream = filePart.getInputStream();
}catch (NullPointerException e){
return("error type");
}
// 随机生成文件名,注意文件名这里,可以增加目录存到指定的目录处
//String fileName = "img/"+UUID.randomUUID()+"."+fileExtension;
String fileName = UUID.randomUUID()+"."+fileExtension;
// 生成上传凭证
Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
StringMap putPolicy = new StringMap();
putPolicy.put("returnBody", "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"url\":\"" + BASE_URL + "$(key)\"}");
putPolicy.put("mimeLimit", "image/*");
String upToken = auth.uploadToken(BUCKET_NAME, null, 3600, putPolicy);
// 创建上传对象,此处region2可能需要修改!
Configuration cfg = new Configuration(Region.region2());
UploadManager uploadManager = new UploadManager(cfg);
try {
// 上传文件
Response qiniuResponse = uploadManager.put(inputStream, fileName, upToken, null, null);
// 解析上传结果
DefaultPutRet putRet = qiniuResponse.jsonToObject(DefaultPutRet.class);
//返回文件名
return putRet.key;
} catch (Exception ex) {
ex.printStackTrace();
`// response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
return("error type");
}
}`