七牛云 Java Web 上传图片

本贴最后更新于 2954 天前,其中的信息可能已经时移世改

本文由黑壳网原创

本文来源七牛云 Java Web 上传图片 - 黑壳网
###壳叔搞笑一刻
####没有对手
警官抓到正在赌博的四个人。“你们知道这是犯法的吗?”警官向第一个人怒吼道。
“不,我只是在这里看看。”
警官又问第二个人:“你呢?”
“我是在等候巴士而已。
第三个也插嘴:“警官,我是在这里等我的女朋友。”
警官看了看第四个人,他拿着牌。于是责问他说:“你手中有物证,大概不能抵赖吧?”
他睨视着警官,回答说:“那么我是跟谁赌博呢?你说说看!”

今天要说的是七牛云介绍

今天主要就是在通过 Java Web 的方式上传图片并且获得图片路径。
先看一下界面,有点简短,请各位将就一下吧。
这是上传页面,没错就是两个按钮。

你以为点击完,会出现 Duang Duang Duang 的效果吗,想多了,只有更剪短的一行 img 标签显示

虽说界面过于清爽,但是功能是实打实的可以!

接下来开始抛代码!
单独 jar qiniuJar.tar - 城通网盘

maven 引入jar包 <!-- 请求头参数分析包 --> <dependency> <groupId>eu.bitwalker</groupId> <artifactId>UserAgentUtils</artifactId> <version>1.20</version> </dependency> <!--七牛云上传图片服务--> <dependency> <groupId>com.qiniu</groupId> <artifactId>sdk</artifactId> <version>6.1.0</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.3.1</version> <scope>compile</scope> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.6.2</version> <scope>compile</scope> </dependency>
html 界面 <html> <head> <title>七牛云服务示例</title> </head> <body> <input type="file" id="upload" name="imagefile" /> <input type="button" value="上传" onclick="return ajaxFileUploadImage();"/><br> <div id="imgurl"> </div> <script type="text/javascript" src="<%=request.getContextPath()%>/js/jquery.min.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/js/global.js"></script> <script type="text/javascript" src="<%=request.getContextPath()%>/js/ajaxfileupload.js"></script> <script type="text/javascript" language="JavaScript" > //图片上传 function ajaxFileUploadImage() { $.ajaxFileUpload({ url: "<%=request.getContextPath()%>/qiniuUpload",//用于文件上传的服务器端请求地址 secureuri: false,//一般设置为false fileElementId: 'upload',//文件上传控件的id属性 <input type="file" id="upload" name="upload" /> dataType: 'text',//返回值类型 一般设置为json success: function (data) //服务器成功响应处理函数 { // console.log(data); // $("#imageUrl").html(data); var img = "&lt;img src="+data+"&gt;" var html = "<br><span>"+img+"</span>"; $("#imgurl").append(html); } }); return false; } </script> </body> </html>
Controller类 import com.QiniuCommon.utils.CommonUtil; import com.QiniuCommon.utils.ExecuteResult; import com.QiniuCommon.utils.QiniuUtil; import com.qiniu.api.auth.AuthException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; /** * Created by kzyuan on 2017/6/20. */ @Controller @RequestMapping(value = "") public class QiniuController { private static Logger logger = LoggerFactory.getLogger(QiniuController.class); @RequestMapping("qiniuCommon") private String qiniuCommon(HttpServletRequest request){ return "qiniuCommon"; } /** * @param request * @param multipartFile * @return */ @RequestMapping(value = "/qiniuUpload", method = RequestMethod.POST) @ResponseBody public String qiniuUpload(HttpServletRequest request, HttpServletResponse response, @RequestParam("imagefile") MultipartFile multipartFile) { ExecuteResult<String> executeResult = new ExecuteResult<String>(); QiniuUtil qiniuUtil = new QiniuUtil(); CommonUtil commonUtil = new CommonUtil(); try { /** * 上传文件扩展名 */ String filenameExtension = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."), multipartFile.getOriginalFilename().length()); /** * MultipartFile 转 file 类型 */ File file = commonUtil.multipartToFile(multipartFile); /** * 七牛云文件上传 服务 file文件 以及 文件扩展名 */ executeResult = qiniuUtil.uploadFile(file, filenameExtension); if (!executeResult.isSuccess()) { return "失败" + executeResult.getErrorMessages(); } } catch (AuthException e) { logger.error("AuthException", e); } return executeResult.getResult(); } }
common.properties 配置文件 #一些公共的配置 #七牛云存储空间名 bucketName= #七牛云绑定域名 domain= #七牛云服务配置项 账号的ACCESS_KEY和SECRET_KEY ACCESS_KEY= SECRET_KEY=
这是综合各种例子,最后总结出的一个比较完全的工具类 import com.qiniu.api.auth.AuthException; import com.qiniu.api.auth.digest.Mac; import com.qiniu.api.io.IoApi; import com.qiniu.api.io.PutExtra; import com.qiniu.api.io.PutRet; import com.qiniu.api.rs.GetPolicy; import com.qiniu.api.rs.PutPolicy; import com.qiniu.api.rs.RSClient; import com.qiniu.api.rs.URLUtils; import org.json.JSONException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.ByteArrayInputStream; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID; /** * 七牛云 手写工具类 * Created by kzyuan on 2017/6/20. */ public class QiniuUtil { private static Logger logger = LoggerFactory.getLogger(QiniuUtil.class); PropertyUtil propertyUtil = new PropertyUtil(); private String bucketName = propertyUtil.getProperty("bucketName"); private String domain = propertyUtil.getProperty("domain"); private String ACCESS_KEY = propertyUtil.getProperty("ACCESS_KEY"); private String SECRET_KEY = propertyUtil.getProperty("SECRET_KEY"); //通过文件路径上传文件 public ExecuteResult<String> uploadFile(String localFile) throws AuthException, JSONException { File file = new File(localFile); /** * 文件后缀名 文件扩展名 */ String filenameExtension = localFile.substring(localFile.lastIndexOf("."), localFile.length()); return uploadFile(file, filenameExtension); } //通过File上传 public ExecuteResult<String> uploadFile(File file, String filenameExtension) throws AuthException, JSONException { ExecuteResult<String> executeResult = new ExecuteResult<String>(); String uptoken = getUpToken(); // 可选的上传选项,具体说明请参见使用手册。 PutExtra extra = new PutExtra(); SimpleDateFormat time = new SimpleDateFormat("yyyy/MM/dd"); // 上传文件 PutRet ret = IoApi.putFile(uptoken, time.format(new Date()) + "/" + UUID.randomUUID() + filenameExtension, file.getAbsolutePath(), extra); if (ret.ok()) { executeResult.setSuccessMessage("上传成功!"); executeResult.setResult(domain+ret.getKey()); } else { executeResult.addErrorMessage("上传失败"); } return executeResult; } /** * 从 inputstream 中写入七牛 * * @param key 文件名 * @param content 要写入的内容 * @return * @throws AuthException * @throws JSONException */ public boolean uploadFile(String key, String content) throws AuthException, JSONException { // 读取的时候按的二进制,所以这里要同一 ByteArrayInputStream inputStream = new ByteArrayInputStream(content.getBytes()); String uptoken = getUpToken(); // 可选的上传选项,具体说明请参见使用手册。 PutExtra extra = new PutExtra(); // 上传文件 PutRet ret = IoApi.Put(uptoken, key, inputStream, extra); if (ret.ok()) { return true; } else { return false; } } //获得下载地址 public String getDownloadFileUrl(String filename) throws Exception { Mac mac = getMac(); String baseUrl = URLUtils.makeBaseUrl(domain, filename); GetPolicy getPolicy = new GetPolicy(); String downloadUrl = getPolicy.makeRequest(baseUrl, mac); return downloadUrl; } //删除文件 public void deleteFile(String filename) { Mac mac = getMac(); RSClient client = new RSClient(mac); client.delete(domain, filename); } //获取凭证 private String getUpToken() throws AuthException, JSONException { Mac mac = getMac(); PutPolicy putPolicy = new PutPolicy(bucketName); String uptoken = putPolicy.token(mac); return uptoken; } private Mac getMac() { Mac mac = new Mac(ACCESS_KEY, SECRET_KEY); return mac; } }
这个工具类注释说的很清楚,其实就是将MultipartFile 转换成File的一个过程 import org.apache.commons.fileupload.disk.DiskFileItem; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.commons.CommonsMultipartFile; import java.io.File; import java.io.IOException; /** * 公共工具类 * Created by kzyuan on 2017/6/19. */ public class CommonUtil { /** * MultipartFile 转换成File * * @param multfile 原文件类型 * @return File * @throws IOException */ public File multipartToFile(MultipartFile multfile) { CommonsMultipartFile cf = (CommonsMultipartFile)multfile; //这个myfile是MultipartFile的 DiskFileItem fi = (DiskFileItem) cf.getFileItem(); File file = fi.getStoreLocation(); return file; } }

如果以上你觉得还是有点迷糊,那么GitHub 代码 是你的首选。

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3203 引用 • 8217 回帖 • 2 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    29 引用 • 230 回帖 • 125 关注
  • 图片上传
    5 引用 • 6 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
ykz200
我是壳叔,我正在想一个很棒的idea 北京

推荐标签 标签

  • Visio
    1 引用 • 2 回帖
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    26479 引用 • 110127 回帖
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 742 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖 • 1 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 2 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 655 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 180 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    151 引用 • 257 回帖
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1062 引用 • 3455 回帖 • 154 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 663 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 497 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1340 回帖
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    167 引用 • 408 回帖 • 484 关注
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    29 引用 • 230 回帖 • 125 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 441 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 76 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 52 关注
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    89 引用 • 150 回帖
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 799 关注
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    15 引用 • 7 回帖 • 1 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    91 引用 • 59 回帖 • 1 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 710 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 529 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 185 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 683 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    7 引用 • 28 回帖
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 562 关注