首先,注册七牛云,获取密钥,个人中心-->密钥管理
当然,我们可以在对象存储中jia建立存储空间,在内容管理中上传图片和下载图片。在七牛上的每一张图片都有自己单一的链接,但是随着业务的扩展,需要访问到一个域下面的所有图片,图片的具体名称并不确定,或者以后会有变动。所以需要实现获取空间文件列表。
看了七牛云的java SDK文档实现过程如下:
//构造一个带指定Zone对象的配置类 Configuration cfg = new Configuration(Zone.zone0()); //...其他参数参考类注释 String accessKey = "your access key"; String secretKey = "your secret key"; String bucket = "your bucket name"; Auth auth = Auth.create(accessKey, secretKey); BucketManager bucketManager = new BucketManager(auth, cfg); //文件名前缀 String prefix = ""; //每次迭代的长度限制,最大1000,推荐值 1000 int limit = 1000; //指定目录分隔符,列出所有公共前缀(模拟列出目录效果)。缺省值为空字符串 String delimiter = ""; //列举空间文件列表 BucketManager.FileListIterator fileListIterator = bucketManager.createFileListIterator(bucket, prefix, limit, delimiter); while (fileListIterator.hasNext()) { //处理获取的file list结果 FileInfo[] items = fileListIterator.next(); for (FileInfo item : items) { System.out.println(item.key); System.out.println(item.hash); System.out.println(item.fsize); System.out.println(item.mimeType); System.out.println(item.putTime); System.out.println(item.endUser); } }
解释一下上面的代码,accessKey 就是AccessKey,secretKey 是你的SecretKey,bucket 是是个存储空间的外链默认域名。
prefix为查找在此域中的文件前缀名称,相当于按照前缀去查询符合条件的所有图片。
我们获取到文件列表之后,网络传输的是文件流的形式,所以本地要使用,需要在代码中对流进行转化。
将FileInfo转化成BufferedImage
//列举空间文件列表 BucketManager.FileListIterator fileListIterator = bucketManager.createFileListIterator(BUCKET, prefix, limit, delimiter); FileInfo[] fileInfos = fileListIterator.next(); Random rand = new Random(); int index = rand.nextInt(fileInfos.length); FileInfo fileInfo = fileInfos[index]; System.out.println("output:>>>" + fileInfo.key); ByteArrayInputStream in = new ByteArrayInputStream(getImageFromNetByUrl(BUCKET_HOST_NAME + "/" + fileInfo.key)); @NonNull BufferedImage oriImage = ImageIO.read(in); return oriImage;
注意 BUCKET_HOST_NAME需要是拼接好网络协议的,七牛云默认是http。