1创建七牛云(申请账号,实名认证,然后创建对象存储)
2个人中心(获取秘钥)
3操作数据(内容管理)
我的文件存储格式为:
文档:https://developer.qiniu.com/kodo/sdk/1239/java#1
自己写一个七牛云工具类
import com.qiniu.cdn.CdnManager; import com.qiniu.cdn.CdnResult; import com.qiniu.common.QiniuException; import com.qiniu.http.Response; import com.qiniu.storage.BucketManager; import com.qiniu.storage.Configuration; import com.qiniu.storage.Region; import com.qiniu.storage.UploadManager; import com.qiniu.storage.model.BatchStatus; import com.qiniu.storage.model.FileInfo; import com.qiniu.storage.model.FileListing; import com.qiniu.util.Auth; import org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class qiniuAPI { //秘钥数据 private String accessKey="**************"; private String secretKey="**************"; private Configuration conf=new Configuration(Region.region0());//华东地区代号是region0,华南是region2 private Auth auth=Auth.create(accessKey,secretKey); //存储空间名 private String bucket="lpf-project"; //通过秘钥和地区获取存储空间 private BucketManager bucketManager = new BucketManager(auth, conf); //token private String token = auth.uploadToken("lpf-project");//指定存储的空间名的token,方便上传 private String[] domain;//获取域名集合 public qiniuAPI() throws QiniuException { this.domain=bucketManager.domainList(bucket); } /* * files存进去的文件集合,从前端获取 * dir 存放的路径前缀 * */ public void addResources(MultipartFile[] files,String dir) throws IOException { if (files != null && files.length>0) { UploadManager upm=new UploadManager(this.conf); for (MultipartFile item : files) {//遍历文件 //MultipartFile转file if(item.getOriginalFilename().equals("") || item.getOriginalFilename()==null) continue;//文件合法检测 File file=File.createTempFile(item.getOriginalFilename(),null);//创建一个临时file文件,用于转存MultipartFile item.transferTo(file);//转存为file String filename=dir+item.getOriginalFilename(); System.out.println(filename+"开始上传"); upm.put(file,filename,this.token);//上传方法(文件,文件名,token) } } } /*文件更新 * prefix更新文件的前缀 * 删除原来的文件 * 插入新的文件 * */ public int updateResources(MultipartFile[] files,String prefix) throws IOException { int flag=0; for (MultipartFile item : files) {//遍历文件,检测是否有空文件 if(item.getOriginalFilename().equals("") || item.getOriginalFilename()==null) return 0; } delResources(prefix); addResources(files,prefix); return flag; } /*文件资源url获取 * prefix 文件名前缀 * limit 每次迭代的长度限制,最大1000,推荐值 1000 * delimiter 指定目录分隔符,列出所有公共前缀(模拟列出目录效果)。缺省值为空字符串 * marker 缺省值为空字符串 * */ public List<String> getResourcesUrlList(String prefix,int limit,String marker,String delimiter) throws QiniuException { //列举空间文件列表 FileListing fileListing = bucketManager.listFiles(this.bucket,prefix,marker,limit,delimiter); List<String> result=new ArrayList<>(); for(FileInfo item : fileListing.items) { String url="http://"+this.domain[0]+"/"+item.key; result.add(url); } return result; } /*文件预取 * urls预取文件url集合 * */ public void prefetchUrls(String[] urls) throws QiniuException { //CDN管理器,用于文件预取,加快读取速度 CdnManager c = new CdnManager(this.auth); //开始文件预取 CdnResult.PrefetchResult result = c.prefetchUrls(urls); System.out.println("文件预取结果:"+result.code); return; } /*文件删除 * prefix删除文件的前缀 * */ public int delResources(String prefix) throws QiniuException { //找到文件 FileListing fileListing = bucketManager.listFiles(this.bucket,prefix,"",1000,""); int flag=0; if (fileListing.items.length>0 && fileListing.items != null) { for(FileInfo item : fileListing.items) { bucketManager.delete(bucket, item.key); System.out.println(item.key+"已经删除!"); flag++; } } return flag; } public void setAccessKey(String accessKey) { this.accessKey = accessKey; } public void setSecretKey(String secretKey) { this.secretKey = secretKey; } public void setConf(Configuration conf) { this.conf = conf; } public void setAuth(Auth auth) { this.auth = auth; } public void setBucket(String bucket) { this.bucket = bucket; } public void setBucketManager(BucketManager bucketManager) { this.bucketManager = bucketManager; } public void setToken(String token) { this.token = token; } public String getAccessKey() { return accessKey; } public String getSecretKey() { return secretKey; } public Configuration getConf() { return conf; } public Auth getAuth() { return auth; } public String getBucket() { return bucket; } public BucketManager getBucketManager() { return bucketManager; } public String getToken() { return token; } }
controller类(为图方便,把dao和server层都写在了controller层,大家千万别模仿)
import com.neu.oneproject.Util.qiniuAPI; import com.neu.oneproject.dao.ItemDao; import com.neu.oneproject.entity.item; import com.qiniu.cdn.CdnManager; import com.qiniu.cdn.CdnResult; import com.qiniu.common.QiniuException; import com.qiniu.common.Zone; import com.qiniu.http.Response; import com.qiniu.storage.BucketManager; import com.qiniu.storage.Configuration; import com.qiniu.storage.Region; import com.qiniu.storage.UploadManager; import com.qiniu.storage.model.FileInfo; import com.qiniu.storage.model.FileListing; import com.qiniu.util.Auth; import javafx.geometry.Pos; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.util.ResourceUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; import javax.servlet.ServletException; import java.io.File; import java.io.IOException; import java.net.URLDecoder; import java.util.ArrayList; import java.util.List; import java.util.Random; @Controller @RequestMapping("/demo") public class MainController { @Resource ItemDao itemDao; private qiniuAPI api; public MainController() throws QiniuException { api=new qiniuAPI(); } @RequestMapping("index") public String index (){ return "index"; } @RequestMapping("item-show/{id}") public String item_show (Model model,@PathVariable("id") int id)throws QiniuException { model.addAttribute("obj",itemDao.selectById(id)); List<String> resultList=api.getResourcesUrlList(id+"/",1000,"",""); String[] urls=resultList.toArray(new String[resultList.size()]); api.prefetchUrls(urls); model.addAttribute("images",resultList); return "item-show"; } @RequestMapping("item-add/{id}") public String item_add (Model model,@PathVariable("id") String id)throws QiniuException { item i; List<String> resultList=null; if(id.equals("-1") || id==null) { i=new item(); } else { i=itemDao.selectById(Integer.parseInt(id)); resultList=api.getResourcesUrlList(id+"/",1000,"",""); } model.addAttribute("obj",i); model.addAttribute("images",resultList); return "item-add"; } @RequestMapping("item-list") public String item_list (Model model){ model.addAttribute("objList",itemDao.selectAll()); return "item-list"; } @RequestMapping("getHtml/{url}") public String getHtml (Model model,@PathVariable("url") String url){ return url; } @Resource com.neu.oneproject.service.SysUserService SysUserService; }