Java上传图片至七牛云

首先,来看官方文档

https://developer.qiniu.com/kodo/sdk/1239/java(官方文档链接)

最简单的就是上传本地文件,直接指定文件的完整路径即可上传。

 
 
  1. //构造一个带指定Zone对象的配置类
  2. Configuration cfg = new Configuration(Zone.zone0());
  3. //...其他参数参考类注释
  4. UploadManager uploadManager = new UploadManager(cfg);
  5. //...生成上传凭证,然后准备上传
  6. String accessKey = "your access key";
  7. String secretKey = "your secret key";
  8. String bucket = "your bucket name";
  9. //默认不指定key的情况下,以文件内容的hash值作为文件名
  10. String key = null;
  11. try {
  12. byte[] uploadBytes = "hello qiniu cloud".getBytes( "utf-8");
  13. Auth auth = Auth.create(accessKey, secretKey);
  14. String upToken = auth.uploadToken(bucket);
  15. try {
  16. Response response = uploadManager.put(uploadBytes, key, upToken);
  17. //解析上传成功的结果
  18. DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
  19. System.out.println(putRet.key);
  20. System.out.println(putRet.hash);
  21. } catch (QiniuException ex) {
  22. Response r = ex.response;
  23. System.err.println(r.toString());
  24. try {
  25. System.err.println(r.bodyString());
  26. } catch (QiniuException ex2) {
  27. //ignore
  28. }
  29. }
  30. } catch (UnsupportedEncodingException ex) {
  31. //ignore
  32. }

数据流上传

这里演示的是InputStream对象的上传,适用于所有的InputStream子类。这里的ByteInputStream只用于演示目的,实际用法根据情况而定。

 
 
  1. //构造一个带指定Zone对象的配置类
  2. Configuration cfg = new Configuration(Zone.zone0());
  3. //...其他参数参考类注释
  4. //...生成上传凭证,然后准备上传
  5. String accessKey = "your access key";
  6. String secretKey = "your secret key";
  7. String bucket = "your bucket name";
  8. //如果是Windows情况下,格式是 D:\\qiniu\\test.png
  9. String localFilePath = "/home/qiniu/test.mp4";
  10. //默认不指定key的情况下,以文件内容的hash值作为文件名
  11. String key = null;
  12. Auth auth = Auth.create(accessKey, secretKey);
  13. String upToken = auth.uploadToken(bucket);
  14. String localTempDir = Paths.get(System.getenv( "java.io.tmpdir"), bucket).toString();
  15. try {
  16. //设置断点续传文件进度保存目录
  17. FileRecorder fileRecorder = new FileRecorder(localTempDir);
  18. UploadManager uploadManager = new UploadManager(cfg, fileRecorder);
  19. try {
  20. Response response = uploadManager.put(localFilePath, key, upToken);
  21. //解析上传成功的结果
  22. DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
  23. System.out.println(putRet.key);
  24. System.out.println(putRet.hash);
  25. } catch (QiniuException ex) {
  26. Response r = ex.response;
  27. System.err.println(r.toString());
  28. try {
  29. System.err.println(r.bodyString());
  30. } catch (QiniuException ex2) {
  31. //ignore
  32. }
  33. }
  34. } catch (IOException ex) {
  35. ex.printStackTrace();
  36. }
下载文件

文件下载分为公开空间的文件下载和私有空间的文件下载。

公开空间

对于公开空间,其访问的链接主要是将空间绑定的域名(可以是七牛空间的默认域名或者是绑定的自定义域名)拼接上空间里面的文件名即可访问,标准情况下需要在拼接链接之前,将文件名进行urlencode以兼容不同的字符。

   
   
  1. String fileName = "七牛/云存储/qiniu.jpg";
  2. String domainOfBucket = "http://devtools.qiniu.com";
  3. String encodedFileName = URLEncoder.encode(fileName, "utf-8");
  4. String finalUrl = String.format( "%s/%s", domainOfBucket, encodedFileName);
  5. System.out.println(finalUrl);

私有空间

对于私有空间,首先需要按照公开空间的文件访问方式构建对应的公开空间访问链接,然后再对这个链接进行私有授权签名。

   
   
  1. String fileName = "七牛/云存储/qiniu.jpg";
  2. String domainOfBucket = "http://devtools.qiniu.com";
  3. String encodedFileName = URLEncoder.encode(fileName, "utf-8");
  4. String publicUrl = String.format( "%s/%s", domainOfBucket, encodedFileName);
  5. String accessKey = "your access key";
  6. String secretKey = "your secret key";
  7. Auth auth = Auth.create(accessKey, secretKey);
  8. long expireInSeconds = 3600; //1小时,可以自定义链接过期时间
  9. String finalUrl = auth.privateDownloadUrl(publicUrl, expireInSeconds);
  10. System.out.println(finalUrl);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 首先,需要在七牛云上创建一个存储空间,并获取该存储空间的accessKey、secretKey、bucket和domain。 2. 在Springboot中引入七牛云Java SDK,可以通过Maven或Gradle进行引入。例如,在Maven中添加以下依赖: ``` <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>[7.2.0, 7.2.99]</version> </dependency> ``` 3. 创建一个七牛云的配置类,用于存储accessKey、secretKey、bucket和domain等配置信息。 ``` @Configuration public class QiniuConfig { @Value("${qiniu.accessKey}") private String accessKey; @Value("${qiniu.secretKey}") private String secretKey; @Value("${qiniu.bucket}") private String bucket; @Value("${qiniu.domain}") private String domain; @Bean public Auth auth() { return Auth.create(accessKey, secretKey); } @Bean public Configuration configuration() { return new Configuration(Zone.zone0()); } @Bean public UploadManager uploadManager() { return new UploadManager(configuration()); } @Bean public BucketManager bucketManager() { return new BucketManager(auth(), configuration()); } @Bean public StringMap putPolicy() { StringMap putPolicy = new StringMap(); putPolicy.put("returnBody", "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"bucket\":\"$(bucket)\",\"name\":\"$(fname)\",\"size\":$(fsize)}"); return putPolicy; } @Bean public String uploadToken() { return auth().uploadToken(bucket, null, 3600, putPolicy()); } @Bean public String domain() { return domain; } } ``` 4. 在Vue中使用element-ui的上传组件,设置上传的接口为Springboot的接口。 ``` <el-upload class="upload-demo" action="/api/upload" :show-file-list="false" :on-success="handleSuccess" :before-upload="beforeUpload" :headers="{Authorization: 'Bearer ' + token}" > <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> ``` 5. 在Springboot中编写上传接口,在该接口中使用七牛云Java SDK进行上传。 ``` @RestController @RequestMapping("/api") public class UploadController { @Autowired private UploadManager uploadManager; @Autowired private String uploadToken; @Autowired private String domain; @PostMapping("/upload") public ResponseEntity<?> upload(@RequestParam("file") MultipartFile file) throws IOException { try { Response response = uploadManager.put(file.getBytes(), null, uploadToken); if (response.isOK()) { String key = JSON.parseObject(response.bodyString()).getString("key"); return ResponseEntity.ok(domain + "/" + key); } } catch (QiniuException e) { e.printStackTrace(); } return ResponseEntity.badRequest().build(); } } ``` 6. 程序运行后,在Vue中上传图片即可自动将图片上传到七牛云,并返回图片的访问URL。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值