七牛云入门使用步骤(图片服务器使用)
来源:互联网 发布:大学生网络兼职有哪些 编辑:程序博客网 时间:2024/05/16 08:47
登入七牛云官网得到3个比较重要的参数。
如图
1.sk
2.ak
3.测试域名
第一步导入七牛云sdk
<!-- 七牛存储的SDK --> <dependency> <groupId>com.qiniu</groupId> <artifactId>qiniu-java-sdk</artifactId> <version>7.2.2</version> </dependency>
第二步配置文件
#填写自己的参数qiniu.accesskey=7hLXQfZfPQPB7EWOrwvgKPLQ8BcskSXC2F3G8HdOqiniu.secretkey=DtR4cFQ48nAZMANHs3002_q5nKSTgXIXTREyKYnLqiniu.bucket=oc-bucketqiniu.cdns=ozgcusern.bkt.clouddn.com
第三步基础工具类以及封装七牛云图片sdk
FileType.java/** * 定义文件类型及其对应魔数 */public enum FileType { JPEG("FFD8FF"), PNG("89504E47"), GIF("47494638"); private String value = ""; private FileType(String value) { this.value = value; } public String getValue() { return value; } public void setValue(String value) { this.value = value; }}
FileTypeHelper.javaimport java.util.Arrays;import org.springframework.util.Assert;public class FileTypeHelper { public static FileType getType(byte[] buff){ Assert.isTrue(buff!=null &&buff.length>28); byte[] bytes= Arrays.copyOfRange(buff, 0, 28); String magic = bytesToHex(bytes); for(FileType type:FileType.values()){ if(magic.startsWith(type.getValue())) return type; } return null; } /** * 判断是否为图片,是图片返回true,否则返回false * * @param buff * @return 图片返回true,否则返回false */ public static boolean isImage(byte[] buff){ FileType type = getType(buff); return FileType.JPEG.equals(type)||FileType.PNG.equals(type); } private static String bytesToHex(byte[] src) { StringBuilder stringBuilder = new StringBuilder(); if (src == null || src.length <= 0) return null; for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString().toUpperCase(); } }
QiniuImg.java
/** * 七牛图片类 */public class QiniuImg implements Serializable{ private static final long serialVersionUID = -68217983332179128L; private String key;//七牛返回的key private String url;//原图片的url private String url16;// private String url32;// private String url48;// private String url64;// private String url128;// private String url256;// private String url512;// public String getKey() { return key; } public void setKey(String key) { this.key = key; } public String getUrl() { if(StringUtils.isEmpty(key)) return null; if(this.url==null){ this.url = QiniuWrapper.getUrl(key); } return url; } public void setUrl(String url) { this.url = url; } public String getUrl16() { if(StringUtils.isEmpty(key)) return null; if(this.url16==null){ this.url16 = QiniuWrapper.getUrl(key, ThumbModel.THUMB_16.getValue()); } return this.url16; } public void setUrl16(String url16) { this.url16 = url16; } public String getUrl32() { if(StringUtils.isEmpty(key)) return null; if(this.url32==null){ this.url32 = QiniuWrapper.getUrl(key, ThumbModel.THUMB_32.getValue()); } return this.url32; } public void setUrl32(String url32) { this.url32 = url32; } public String getUrl48() { if(StringUtils.isEmpty(key)) return null; if(this.url48==null){ this.url48 = QiniuWrapper.getUrl(key, ThumbModel.THUMB_48.getValue()); } return this.url48; } public void setUrl48(String url48) { this.url48 = url48; } public String getUrl64() { if(StringUtils.isEmpty(key)) return null; if(this.url64==null){ this.url64 = QiniuWrapper.getUrl(key, ThumbModel.THUMB_64.getValue()); } return this.url64; } public void setUrl64(String url64) { this.url64 = url64; } public String getUrl128() { if(StringUtils.isEmpty(key)) return null; if(this.url128==null){ this.url128 = QiniuWrapper.getUrl(key, ThumbModel.THUMB_128.getValue()); } return this.url128; } public void setUrl128(String url128) { this.url128 = url128; } public String getUrl256() { if(StringUtils.isEmpty(key)) return null; if(this.url256==null){ this.url256 = QiniuWrapper.getUrl(key, ThumbModel.THUMB_256.getValue()); } return this.url256; } public void setUrl256(String url256) { this.url256 = url256; } public String getUrl512() { if(StringUtils.isEmpty(key)) return null; if(this.url512==null){ this.url512 = QiniuWrapper.getUrl(key, ThumbModel.THUMB_512.getValue()); } return this.url512; } public void setUrl512(String url512) { this.url512 = url512; } //七牛上传key,然后七牛会返回一个key,将返回的key保存到数据库 public String getUploadKey(){ return QiniuKeyGenerator.generateKey(); }}
QiniuKeyGenerator.java
/** * 资源在七牛云存储的key生成器 * 注:资源是七牛云存储服务中的逻辑存储单元。对于每一个账号, * 该账号里存放的每个资源都有唯一的一对属主空间(Bucket)与键名(Key),作为识别标识 */public class QiniuKeyGenerator { public static final String KEY = "/{0}/{1}/{2}/{3}";// 多图片可以按照:/表名/字段名/业务值(refId)/时间戳 处理 public static String generateKey(){ return MessageFormat.format(KEY, "default", "all", "0", CommonUtil.getUID()); }}
QiniuStorage.java
/** * 七牛云存储管理器 * 上传图像和查看图像 */public class QiniuStorage { /** * 上传单张图片;返回上传图片的key * @param buff */ public static String uploadImage(byte[] buff){ String key = QiniuKeyGenerator.generateKey(); key = QiniuWrapper.upload(buff, key,false); return key; } /** * 上传单张图片;返回上传图片的url,此url会过期,切记不要存储在数据库中; * @param buff * @param img * @return QiniuImg */ public static QiniuImg uploadImage(byte[] buff,QiniuImg img){ String key = QiniuWrapper.upload(buff, img.getUploadKey(),false); img.setKey(key); return img; } /** * 上传多个图片 * @param imageBuffs 图片字节数组 * @param img 分组图片的属性 * @return */ public static QiniuImg[] uploadImages(byte[][] imageBuffs,QiniuImg img){ QiniuImg[] images = new QiniuImg[imageBuffs.length]; for(int i = 0; i < imageBuffs.length; i++){ QiniuImg newImg = new QiniuImg(); uploadImage(imageBuffs[i],img); newImg.setKey(img.getKey()); images[i] = newImg; } return images; } /** * 获取图片链接 * @param key * @return */ public static String getUrl(String key){ return QiniuWrapper.getUrl(key); } /** * 获取有有效期的图片链接 * @param key * @param expires 单位:秒 * @return */ public static String getUrl(String key,long expires){ return QiniuWrapper.getUrl(key,expires); } /** * 获取图片链接 * @param key * @return */ public static String getUrl(String key,ThumbModel model){ return QiniuWrapper.getUrl(key,model.getValue()); } /** * 获取有有效期的图片链接 * @param key * @param expires 单位:秒 * @return */ public static String getUrl(String key,ThumbModel model,long expires){ return QiniuWrapper.getUrl(key,model.getValue(),expires); }}
ThumbModel.java
/** * 文件的缩略图及其模式字符串定义 */public enum ThumbModel { THUMB_16("imageView2/2/w/16/h/16"), THUMB_32("imageView2/2/w/32/h/32"), THUMB_48("imageView2/2/w/48/h/48"), THUMB_64("imageView2/2/w/64/h/64"), THUMB_128("imageView2/2/w/128/h/128"), THUMB_256("imageView2/2/w/256/h/256"), THUMB_512("imageView2/2/w/512/h/512"); private String value; private ThumbModel(String value) { this.value = value; } public String getValue() { return value; }}
七牛云SDK的封装
/** * 七牛SDK的包装类,以便于业务使用 */public class QiniuWrapper { private static final Logger logger = LoggerFactory.getLogger(QiniuWrapper.class); private static final String CONFIG_BUCKET="qiniu.bucket"; private static final String CONFIG_AK="qiniu.accesskey"; private static final String CONFIG_SK="qiniu.secretkey"; private static final String CONFIG_CDN="qiniu.cdns"; private static final Auth auth; private static final UploadManager uploadManager; private static final String bucketName; private static final List<String> cdns; /** * 从外部文件中初始化七牛存储相关的配置信息 */ static{ Properties properties =PropertiesUtil.getDefaultProperties(); auth = Auth.create(properties.getProperty(CONFIG_AK), properties.getProperty(CONFIG_SK)); Configuration cfg = new Configuration(Zone.zone2());//设置空间上传域名 uploadManager = new UploadManager(cfg); bucketName=properties.getProperty(CONFIG_BUCKET); String cdn = properties.getProperty(CONFIG_CDN); cdns = Arrays.asList(cdn.split(",")); } /** * 获取上传资源的token * @return */ public static String getUploadToken(){ return auth.uploadToken(bucketName); } /** * 获取更新资源的token,只能用于更新参数key所代表的资源 * @param key 存储空间中已存在的资源key * @return */ public static String getUploadToken(String key){ return auth.uploadToken(bucketName,key); } /** * 上传文件 * @param data 二进制格式的文件内容 * @param key 文件在七牛中的key * @param update 是否是更新 * @return */ public static String upload(byte[] data,String key,boolean update){ try { String token = update?auth.uploadToken(bucketName,key):auth.uploadToken(bucketName); Response response = uploadManager.put(data, getFullKey(data, key), token); DefaultPutRet ret = response.jsonToObject(DefaultPutRet.class); return ret.key; } catch (QiniuException e) { logger.error("upload file to qiniu cloud storage failed",e); } return null; } private static String getFullKey(byte[] data,String key){ FileType type= FileTypeHelper.getType(data); if(type!=null){ return key+"."+type.name().toLowerCase(); }else{ return key; } } public static String getUrl(String key,String model){ return getUrl(key, model, 3600); } /** * 获取多个key图片; * @param keys 逗号隔开的多个key; * @param model * @return */ public static List<String> getUrls(String keys,String model){ List<String> list = null; if (org.apache.commons.lang.StringUtils.isNotBlank(keys)) { list = new ArrayList<String>(); for (String key : keys.split(",")) { list.add(getUrl(key, model, 3600)); } } return list; } public static String getUrl(String key){ if(!StringUtils.isEmpty(key)){ return auth.privateDownloadUrl("http://"+getCDN()+"/@"+key); } return null; } /** * @param key * @param expires 单位:秒 * @return */ public static String getUrl(String key,long expires){ if(!StringUtils.isEmpty(key)){ long time = System.currentTimeMillis()/1000+expires; return auth.privateDownloadUrl("http://"+getCDN()+"/@"+key,time); } return null; }
=======================================================
配置文件读取类
import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.net.URI;import java.util.HashMap;import java.util.Map;import java.util.Properties;public class PropertiesUtil { private static Map<String,Properties> propMap = new HashMap<String,Properties>(); /*设置默认的properties文件,方便操作*/ public static final String DEFAULT_PROPERTIES_FILE="application.properties"; public static Object getProperty(String file,String key){ Properties prop = getProperties(file); if(prop != null && prop.get(key) != null){ return prop.get(key); } return null; } public static Properties getProperties(String file){ try { if(propMap.get(file) == null){ Properties prop = new Properties(); prop.load(PropertiesUtil.class.getClassLoader().getResourceAsStream(file)); propMap.put(file,prop); return prop; }else{ return propMap.get(file); } } catch (IOException e) { e.printStackTrace(); } return null; } public static void updateProperties(Properties prop,String filePath){ FileInputStream fis = null; BufferedInputStream bis = null; try { URI fileUri = PropertiesUtil.class.getClassLoader().getResource(filePath).toURI(); File file = new File(fileUri); Properties tmpProp = new Properties(); fis = new FileInputStream(file); bis = new BufferedInputStream(fis); tmpProp.load(bis); FileOutputStream fos = new FileOutputStream(file); for(Object key : prop.keySet()){ tmpProp.setProperty(String.valueOf(key),String.valueOf(prop.get(key))); } tmpProp.store(fos, null); fis.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 从默认配置文件中获取properties * @return */ public static Properties getDefaultProperties(){ return getProperties(DEFAULT_PROPERTIES_FILE); } /** * 从默认配置文件中获取配置项 * @param key * @return */ public static String getProperty(String key){ Properties prop = getDefaultProperties(); if(prop != null && prop.get(key) != null){ return prop.getProperty(key); } return null; }}
第三步测试类进行测试
public class QiNiuTest extends TestCase { Logger log = Logger.getLogger(AppTest.class); public void testImages() { //测试上传图片 byte[] buff = CommonUtil.getFileBytes(new File("C:/Users/paperpass/Desktop/tu29253_9.jpg")); String key = QiniuStorage.uploadImage(buff); System.out.println("key = " + key); //String key = "/default/all/0/0755ffd19e3e416db0a69ca3b23d744a.jpeg"; //测试下载图片 String url = QiniuStorage.getUrl(key); System.out.println("url = " + url); //测试下载不同大小的图片 url = QiniuStorage.getUrl(key,ThumbModel.THUMB_256); System.out.println("url = " + url); }}
测试结果为
key = /default/all/0/b6a6d44d81f8410ba98b2fa63a9eb62e.jpeg url = http://ozgcuyern.bkt.clouddn.com/@/default/all/0/b6a6d44d81f8410ba98b2fa63a9eb62e.jpeg?e=1510896997&token=7hLXQfZfPQPB7EWOrwvgKPLQ8B3skSXC2F3G8HdO:FQc-sMEM-u1TPMZ5qmvsQG0aYDM= url = http://ozgcuyern.bkt.clouddn.com/@/default/all/0/b6a6d44d81f8410ba98b2fa63a9eb62e.jpeg?imageView2/2/w/256/h/256&e=1510896997&token=7hLXQfZfPQPB7EWOrwvgKPLQ8B3skSXC2F3G8HdO:1nZqpHb15OV2H5Hb4_7HP_SbEek
数据库中直接保存key的值。通过key可以查到七牛云所在的图片。url中参数e指的图片存储的时间,参数token是前面url的加密之后的字符串
阅读全文
0 0
- 七牛云入门使用步骤(图片服务器使用)
- Ext入门(初次使用步骤)
- linux服务器使用入门
- log4j的基本使用步骤(入门级)
- 使用hadoop存储图片服务器 使用hadoop存储图片服务器
- 使用LoadRunner监视Windows服务器设置步骤
- 使用LoadRunner监控Apach服务器的步骤
- 使用hadoop存储图片服务器
- 使用hadoop存储图片服务器
- 使用hadoop存储图片服务器
- 使用tomcat做图片服务器
- 使用FastDFS搭建图片服务器
- FastDFS-图片服务器的使用
- 使用tomcat做图片服务器
- C# 图片识别asprise-ocr使用步骤
- Java使用Protocol Buffers入门四步骤
- Java使用Protocol Buffers入门四步骤
- Java使用Protocol Buffers入门四步骤
- 三种方式打印杨辉三角形(JAVA实现)
- 用编写一个简单的记事本(C#实现)
- 数据结构中,几种树的结构表示方法(C语言实现)
- 树的三种遍历方式(C语言实现)
- RSA加密算法验证(C#实现)
- 七牛云入门使用步骤(图片服务器使用)
- 面向对象的认识
- QT使用包含MFC的内容包含过的库。
- 【错误】The node /hbase is not in ZooKeeper,Hbase端口占用无法正常启动
- Python3网络爬虫:requests+mongodb+wordcloud 爬取豆瓣影评并生成词云
- 深入挖掘springcloud微服务防雪崩利器Hystrix
- 数组常用函数
- ubuntu找不到动态链接库 can not find openBLAS.so
- Spring Boot集成MyBatis