我需要使用cloudinary的java API将图像上传到cloudinary
。我已经创建了cloudinary帐户,通过它我获得了api云名称
,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 name
、API Key
、API Secret
)暴露给我的每个人。不想。
查看 cloudinary 的文档 getting started我找到了使用环境变量来存储这些值并从那里访问它的方法,但文档没有正确指导我。
我用过 在 Java EE 环境中,您可以设置可用于 Java EE 容器的环境变量:
CLOUDINARY_URL=cloudinary://{api_key}:{api_secret}@{cloud_name}
这将使您能够接收 Cloudinary 实例:
Cloudinary cloudinary = Singleton.getCloudinary();
但是我遇到了 Singleton
类的编译时错误,它无法在任何 jar 中找到它。看其他一些文章,这个类应该是com.cloudinary.Singleton
,但是我的cloudinary jar没有这个类。
我使用 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 以反射(reflect)环境变量更改和以下更改。这样它就不会向公共(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);
}
关于java - 如何使用环境变量值访问java中的cloudinary API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51920702/