七牛——对象存储

需求:应用服务器和文件服务器分离。在七牛中用的是key:value的方式存储文件而不是树形结构。key是文件名要唯一,值就是文件。

基本流程

1.服务器生成上传策略。
2.编写上传文件的页面。
3.上传成功回掉服务器。
4.保存一些文件信息。

准备

下载jar包,搭建环境。一些文件,注册七牛账户,开辟对象存储。
七牛要用到的相关jar包如下。
这里写图片描述

开工

private static String accessKey ="***";//你的AK
private static String secretKey ="***";//你的SK
public static  String bucket = "***";//你的bucket
//获取上传策略,可封装到一个工具类里
public static String getToken(){
    Auth auth = Auth.create(accessKey, secretKey);
    return auth.uploadToken(bucket,null,3600,new StringMap()
              .put("callbackUrl","http://***")
              .put("callbackBody", "{"\"name\":\"$(x:name)\",\"price\":\"$(x:price)\", "\"time\":\"$(avinfo.format.duration)\",\"videosize\":\"$(avinfo.format.size)\",\"coursepath\":\"$(key)\"}")
              .put("callbackBodyType", "application/json")
            );
}

简单说下上传策略,callbackUrl是指文件上传成功后回掉服务端的请求地址,为什么要回掉,因为在上传完成时需要获取相关信息保存到数据库里,而回掉带过来的参数写在callbackBody里面,是以json方式,所以需要注意格式,参数名:参数值的形式,如果值是从表单提交过去的,要写成x:name的形式,如果是七牛内部的数据,官方文档中有,这里的avinfo.format.duration是指视频文件的时长。callbackBodyType以json形式返回。

  • controller
@RequestMapping(value="/gettoken")
    public  String gettoken(HttpServletRequest request) throws UnsupportedEncodingException{
        String to=UpToken.getToken();
        Date d=new Date();
        request.setAttribute("time", d.getTime());
        request.setAttribute("toke", to);
    return "**.jsp";
    }   

这里我用的springMVC框架,获取到上传策略,放到request中,这里还放了一个时间的long类型作为文件名,保证key唯一。

  • 页面,action是固定的这样写,其他属性注意到name,price的name值要加上x:,用于七牛识别。
<form method="post" action="http://upload.qiniu.com/" enctype="multipart/form-data">
name:<input type="text" name="x:name"/>
price:<input type="text" name="x:price"/>
<input name="key" type="hidden" value="${time}">
<input name="token" type="hidden" value="${toke}">
file:<input type="file" name="file"/>
<button type="submit">上传</button>
</from>
  • 回掉,在上传成功之后就去调用上传策略里的那个地址,解析json,用的fastjson。
@RequestMapping(value="/add.app",produces="application/json;charset=utf-8")
    public String add(HttpServletRequest request,HttpServletResponse response) throws UnsupportedEncodingException{
        StringBuilder sb=null;
         try {  
                String line = "";  
                BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8"));  
                 sb = new StringBuilder();  
                while ((line = br.readLine()) != null) {  
                    sb.append(line);  
                }
                String tb=sb.toString();
                JSONObject jsonObject = JSONObject.fromObject(tb);  
                 String coursepath=jsonObject.getString("coursepath");
                String name=jsonObject.getString("name");
                String price=jsonObject.getString("price");
                 String time=jsonObject.getString("time");
                 //其他操作,将数据保存到数据库什么的...
                 renturn "**";
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值