如何使用环境变量值访问 Java 中的云 API?



我需要使用cloudinary的java API将图像上传到cloudinary。我创建了云帐户,通过该帐户我获得了 apiCloud nameAPI KeyAPI Secret。使用这些东西,我可以像波纹管一样将我的图像上传到云中:

@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);
}

但是现在我的问题是我将这段代码保存在公共 git 存储库中,然后从那里将这段代码推送到Heroku.但是使用这种方法会将我cloudinary的细节(如Cloud nameAPI KeyAPI Secret(暴露给每个人,这是我不想要的。

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

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

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

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

Cloudinary cloudinary = Singleton.getCloudinary();

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

我正在使用云级 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 以反映环境变量的变化和后续变化。这样它就不会将我的帐户详细信息暴露给公共存储库。

@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);
}

最新更新