如何使用环境变量值访问 java 中的 cloudinary API?

How to use environment variable values to access cloudinary API in java?

我需要使用 cloudinary 的 java API.I 将图像上传到 cloudinary API.I 已经创建了 cloudinary 帐户,我通过该帐户获得了 api Cloud name,API Key,API Secret。使用这些东西,我可以像下面这样将我的图像上传到 cloudinary:

@PostMapping("/uploadPic")
    public ResponseEntity<Object> upload(@RequestParam("file") MultipartFile multipartFile){

        String cloudinaryImgURL=null;
        try {

            File fileDir = new File("rowFiles");
            if (! fileDir.exists()){
                fileDir.mkdir();

            }
            String fileName=multipartFile.getOriginalFilename();
            File physicalFile=new File(multipartFile.getOriginalFilename());
            FileOutputStream fout=new FileOutputStream(fileDir.getName()+"/"+physicalFile);
            fout.write(multipartFile.getBytes());
            fout.close();

            //For stack-overflow question using dummy values for credientials.
            Cloudinary cloudinary = new Cloudinary(ObjectUtils.asMap(
                      "cloud_name", "your_cloud_name",
                      "api_key", "your_api_key",
                      "api_secret", "your_secret_key"));



            File toUpload = new File("rowFiles/"+fileName);
            Map params = ObjectUtils.asMap("public_id", "SRWRestImageBase/"+fileName);

            Map uploadResult =Singleton.getCloudinary().uploader().upload(toUpload, params);
            toUpload.delete();
            System.out.println("==============>>"+uploadResult.get("url"));
            cloudinaryImgURL=uploadResult.get("url").toString();


        } catch (Exception e) {
            System.out.println("upload:"+e.getMessage());
            // TODO: handle exception
        }
        return new ResponseEntity<Object>("File uploaded successfully:"+cloudinaryImgURL,HttpStatus.OK);
    }

但现在我的问题是我将此代码保存在 public git 存储库中,然后我将此代码推送到 Heroku。但是使用此方法会将我的 cloudinary 详细信息(例如 Cloud nameAPI KeyAPI Secret 暴露给我不想要的每个人。

查看 cloudinary 的 getting started 文档,我找到了使用环境变量存储这些值并从那里访问它的方法,但文档没有正确指导我。

我用过 在 Java EE 环境中,您可以设置可用于 Java EE 容器的环境变量:

CLOUDINARY_URL=cloudinary://{api_key}:{api_secret}@{cloud_name}

这将使您能够接收 Cloudinary 实例:

Cloudinary cloudinary = Singleton.getCloudinary();

但是我收到 class Singleton 的编译时错误,它无法在任何 jar 中找到。看其他文章,这个class应该是com.cloudinary.Singleton,但是我的cloudinary jar没有这个class.

我正在使用 cloudinary gradle 依赖作为:

// https://mvnrepository.com/artifact/com.cloudinary/cloudinary-http43
compile group: 'com.cloudinary', name: 'cloudinary-http43', version: '1.2.2'

如果有人能指导我正确的方向,我将不胜感激。 提前致谢。

我找到了自己的解决方案。 我们必须设置环境变量 CLOUDINARY_URL=cloudinary://{api_key}:{api_secret}@{cloud_name} 并重新启动 eclipse 以反映环境变量的变化和后续变化。这样它就不会将我的帐户详细信息暴露给 public 存储库。

@PostMapping("/uploadPic")
public ResponseEntity<Object> upload(@RequestParam("file") MultipartFile multipartFile){
    String cloudinaryImgURL=null;
    try {
        File fileDir = new File("rowFiles");
        if (! fileDir.exists()){
            fileDir.mkdir();
        }
        String fileName=multipartFile.getOriginalFilename();
        File physicalFile=new File(multipartFile.getOriginalFilename());
        FileOutputStream fout=new FileOutputStream(fileDir.getName()+"/"+physicalFile);
        fout.write(multipartFile.getBytes());
        fout.close();
        File toUpload = new File("rowFiles/"+fileName);
        Cloudinary cloudinary = new Cloudinary();
        System.out.println("API Key:"+cloudinary.config.apiKey);
        Map params = ObjectUtils.asMap("public_id", "SRWRestImageBase/"+fileName);
        Map uploadResult = cloudinary.uploader().upload(toUpload, params);
        toUpload.delete();
        System.out.println("==============>>"+uploadResult.get("url"));
        cloudinaryImgURL=uploadResult.get("url").toString();
    } catch (Exception e) {
        System.out.println("upload:"+e.getMessage());
    }
    return new ResponseEntity<Object>("File uploaded successfully:"+cloudinaryImgURL,HttpStatus.OK);
}