控制层
@RequestMapping(value = "/uploadProductImage", method = { RequestMethod.POST })
@ResponseBody
public JSONObject uploadHeadImage(@RequestParam("file") MultipartFile file)
throws IOException {
Assert.notNull(file, "上传文件不能为空");
JSONObject json = new JSONObject();
try {
boolean flag = file.isEmpty();
if (!flag) {
String name=System.currentTimeMillis()+file.getOriginalFilename();//System.currentTimeMillis()根据系统时间产生随机数
PhotoUtil mUtil=new PhotoUtil();
String resInfo = mUtil.upload(file, name);//得到回显URL地址
json.put("msg","上传成功");
json.put("errorCode",ErrorCodeContents.SUCCESS_CODE);
json.put("src",resInfo);
} else {
json.put("msg","上传失败");
json.put("errorCode",ErrorCodeContents.FAILUE_CODE);
}
}catch(Exception E){
E.printStackTrace();
}
return json;
}
工具类
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.lang.RandomStringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;
import com.qiniu.util.StringUtils;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.ResponseBody;
@Component
public class PhotoUtil {
@Autowired
private static CacheUtil cacheUtil;
/**
* @Title:PhotoUtil
* @Description:项目启动时注入cacheUtil
* @param cacheUtil
*/
@Autowired
public PhotoUtil(CacheUtil cacheUtil){
PhotoUtil.cacheUtil = cacheUtil;
//System.out.println(getLocalRestUrlFromCache());
}
//设置好账号的ACCESS_KEY和SECRET_KEY
public String ACCESS_KEY ; //这两个登录七牛 账号里面可以找到
public String SECRET_KEY ;
//要上传的空间
public String BUCKET_NAME; //对应要上传到七牛上 你的那个路径(自己建文件夹 注意设置私有)
/**
* @fieldName: HOST_NAME
* @fieldType: String
* @Description: 七牛云域名
*/
public String HOST_NAME;
//密钥配置
public Auth auth ;
//创建上传对象
public UploadManager uploadManager = new UploadManager();
/**
* @Title:PhotoUtil
* @Description:构造函数初始化
*/
public PhotoUtil() {
this.ACCESS_KEY = cacheUtil.getObjectValueFormCache("qiniu.properties+ACCESS_KEY");
this.SECRET_KEY = cacheUtil.getObjectValueFormCache("qiniu.properties+SECRET_KEY");
this.BUCKET_NAME = cacheUtil.getObjectValueFormCache("qiniu.properties+BUCKET_NAME");
this.HOST_NAME = cacheUtil.getObjectValueFormCache("qiniu.properties+HOST_NAME");
auth = Auth.create(ACCESS_KEY, SECRET_KEY);
}
/**
* 简单上传,使用默认策略,只需要设置上传的空间名就可以了
*
* @param fileName 文件上传至七牛云空间的名称
* @return
*/
public String getUpToken(String fileName) {
//return auth.uploadToken(bucketname);
//<bucket>:<key>,表示只允许用户上传指定key的文件。在这种格式下文件默认允许“修改”,已存在同名资源则会被本次覆盖。
//如果希望只能上传指定key的文件,并且不允许修改,那么可以将下面的 insertOnly 属性值设为 1。
//第三个参数是token的过期时间
return auth.uploadToken(BUCKET_NAME, fileName, 3600, new StringMap().put("insertOnly", 1));
}
/**
* @Title: upload
* @Description: 文件上传
* @param filePath 文件路径
* @param fileName 文件名
* @return targetUrl 七牛云中访问的url
*/
public String upload(String filePath, String fileName) {
try {
//调用put方法上传
Response res = uploadManager.put(filePath, fileName, getUpToken(fileName));
//打印返回的信息
System.out.println(res.bodyString());
} catch (QiniuException e) {
Response r = e.response;
// 请求失败时打印的异常的信息
System.out.println(r.toString());
try {
//响应的文本信息
System.out.println(r.bodyString());
} catch (QiniuException e1) {
//ignore
e.printStackTrace();
}
}
return HOST_NAME+fileName;
}
// /**
// * 获取下载文件路径,即:donwloadUrl
// *
// * @return
// */
// public String getDownloadUrl(String targetUrl) {
// String downloadUrl = auth.privateDownloadUrl(targetUrl);
// return downloadUrl;
// }
// /**
// * 文件下载
// *
// * @param targetUrl
// */
// public void download(String targetUrl) {
// //获取downloadUrl
// String downloadUrl = getDownloadUrl(targetUrl);
// //本地保存路径
// String filePath = "E:\\chen\\";
// download(downloadUrl, filePath);
// }
// /**
// * 通过发送http get 请求获取文件资源
// *
// * @param url
// * @param filepath
// * @return
// */
// private static void download(String url, String filepath) {
// OkHttpClient client = new OkHttpClient();
// System.out.println(url);
// Request req = new Request.Builder().url(url).build();
// com.squareup.okhttp.Response resp = null;
// try {
// resp = client.newCall(req).execute();
// System.out.println(resp.isSuccessful());
// if (resp.isSuccessful()) {
// ResponseBody body = resp.body();
// InputStream is = body.byteStream();
// byte[] data = readInputStream(is);
// //判断文件夹是否存在,不存在则创建
// File file = new File(filepath);
// if (!file.exists() && !file.isDirectory()) {
// System.out.println("===文件夹不存在===创建====");
// file.mkdir();
// }
// File imgFile = new File(filepath + "888.jpg");
// FileOutputStream fops = new FileOutputStream(imgFile);
// fops.write(data);
// fops.close();
// }
// } catch (IOException e) {
// e.printStackTrace();
// System.out.println("Unexpected code " + resp);
// }
// }
/**
* 读取字节输入流内容
*
* @param is
* @return
*/
public byte[] readInputStream(InputStream is) {
ByteArrayOutputStream writer = new ByteArrayOutputStream();
byte[] buff = new byte[1024 * 2];
int len = 0;
try {
while ((len = is.read(buff)) != -1) {
writer.write(buff, 0, len);
}
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return writer.toByteArray();
}
private byte[] getBytesWithMultipartFile(MultipartFile multipartFile) {
try {
return multipartFile.getBytes();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public String upload(MultipartFile multipartFile, String fileName) {
byte[] bytes = getBytesWithMultipartFile(multipartFile);
String timeStamp = DateUtil.getCurrentTime("yyyyMMddHHmmssSSS");
//fileName = timeStamp+fileName.substring(0, fileName.indexOf('.'));
try {
//调用put方法上传
//Response res = uploadManager.put(filePath, fileName, getUpToken(fileName));
Response res = uploadManager.put(bytes, timeStamp, getUpToken(timeStamp));
//打印返回的信息
System.out.println(res.bodyString());
} catch (QiniuException e) {
Response r = e.response;
// 请求失败时打印的异常的信息
System.out.println(r.toString());
try {
//响应的文本信息
System.out.println(r.bodyString());
} catch (QiniuException e1) {
//ignore
e.printStackTrace();
}
}
return HOST_NAME+timeStamp;
}
// public static void main(String args[]) throws IOException {
// String fileName = "dog.jpg";
// //上传文件的路径
// String FilePath = "C:\\Users\\lenovo\\Desktop\\123456.jpg"; //本地要上传文件路径
// //new PhotoUtil().upload(FilePath,fileName);
//
// //构造私有空间的需要生成的下载的链接;
// //格式: http://pi4uvypps.bkt.clouddn.com/dog.jpg
// //String targetUrl = "http://私有空间绑定的域名/下载文件名称.后缀";
// //new PhotoUtil().download(targetUrl);
// }
}
前端js
upload.render({
elem: '#img'
,method:'post'
,url: basePath+'product/uploadProductImage'
,done: function(res){
//如果上传失败
if(res.errorCode!="10000"){
return layer.msg('上传失败');
}else{
var src = res.src;
$('.upload-img').html('<img class="layui-upload-img" style="width:100%;height:100%" src="'+res.src+'" id="demo1">');
$('.layui-btn-img').text("重新上传");
$("#productImg").val(res.src);
return layer.msg('上传成功',{time:700});
}
}
});
jsp
<div class="layui-form-item">
<label class="layui-form-label">宣传图片<label style="color:red">*</label></label>
<div class="layui-upload">
<div class="layui-upload-list">
<div class="upload-img" style="width:100%">
<!-- <img class="layui-upload-img" style="width:100%;height:100%" src="uploadImg/骷髅.jpg" id="demo1"> -->
</div>
<button type="button" class="layui-btn btn layui-btn-img" id="img" style="margin-left: 20%;">上传图片</button>
</div>
</div>
</div>