Java上传图片至七牛云

来源:互联网 发布:擎洲广达计价软件 编辑:程序博客网 时间:2024/06/05 05:37

首先,来看官方文档

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


原创粉丝点击