java中httpservlet对接七牛云对象存储图片上传

吃猫的鱼
2023-04-29 / 0 评论 / 112 阅读 / 正在检测是否收录...

前言

今天,在做一个需要用到图片上传的业务的时候,用到的一个需要对接七牛云对象存储。现在将其记录下来,便于日后翻阅。

主要用于通过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");
        }
    }

3

评论 (0)

取消
友情链接 文章阅读: 网站地图