本文由黑壳网原创
壳叔搞笑一刻
没有对手
警官抓到正在赌博的四个人。“你们知道这是犯法的吗?”警官向第一个人怒吼道。
“不,我只是在这里看看。”
警官又问第二个人:“你呢?”
“我是在等候巴士而已。
第三个也插嘴:“警官,我是在这里等我的女朋友。”
警官看了看第四个人,他拿着牌。于是责问他说:“你手中有物证,大概不能抵赖吧?”
他睨视着警官,回答说:“那么我是跟谁赌博呢?你说说看!”
今天要说的是七牛云介绍
今天主要就是在通过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 = "<img src="+data+">"
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代码 是你的首选。
黑壳博客 blog.bhusk.comE-mail:keshu@bhusk.com
本文由 黑壳博客的壳叔 创作或转载,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。
可自由转载、引用,但需署名作者且注明文章