您的位置:首页 > 编程语言 > Java开发

Java 常用工具类(9) : 图片上传至阿里云OSS

2018-03-01 16:52 627 查看

阿里云OSS工具类

import java.io.ByteArrayInputStream;
import java.io.File;
import java.net.URL;
import java.util.Date;

import com.aliyun.oss.OSSClient;

/**
* 阿里云OSS文件上传工具类
* @author guyinyihun
*
*/
public class OssClientUtil {

private static String endpoint = "xxx";
private static String accessKeyId = "xxx";
private static String accessKeySecret = "xxx";
private static String bucket = "xxx";

private static OssClientUtil ossClientUtil;

private OssClientUtil() {
super();
}

public static OssClientUtil newInstance() {
if (ossClientUtil == null) {
ossClientUtil = new OssClientUtil();
}
return ossClientUtil;
}

/**
* 文件流上传
*
* @Title uploadPic
* @param @param
*            file
* @param @param
*            keys
* @param @return
* @return String
* @Explain
*/
public static String uploadPic(File file, String keys) {
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 连接oss云存储服务器
ossClient.putObject(bucket, keys, file);
String url = String.valueOf(getUrl(keys));
ossClient.shutdown();
return url;
}

/**
* 文件流上传2
*
* @Title uploadPic
* @param @param
*            file
* @param @param
*            keys
* @param @return
* @return String
* @Explain
*/
public static String uploadPicLongTime(File file, String keys) {
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 连接oss云存储服务器
ossClient.putObject(bucket, keys, file);
String url = String.valueOf(getUrlLongTime(keys));
ossClient.shutdown();
return url;
}

/**
* 字节数组上传
*
* @Title uploadPic
* @param @param
*            content
* @param @param
*            keys
* @param @return
* @return String
* @Explain
*/
public String uploadPic(byte[] content, String keys) {
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 连接oss云存储服务器
ossClient.putObject(bucket, keys, new ByteArrayInputStream(content));
String url = String.valueOf(getUrl(keys));
ossClient.shutdown();
return url;
}

/**
* 获取文件URL
*
* @Title getUrl
* @param @param
*            key
* @param @return
* @return URL
*/
public static String getUrl(String key) {
if (key.indexOf("http") == -1) {
OSSClient server = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 连接oss云存储服务器
// 设置URL过期时间为10年 3600l* 1000*24*365*10
Date expirations = new Date(new Date().getTime() + 1000 * 60 * 5);// url超时时间
// 生成URL
URL url = server.generatePresignedUrl(bucket, key, expirations);
String strUrl = String.valueOf(url);
// 关闭client
server.shutdown();
return splitUrl(strUrl);
} else {
return splitUrl(key);
}
}

/**
* 获取文件URL
*
* @Title getUrl
* @param @param
*            key
* @param @return
* @return URL
*/
public static String getUrlOneYeay(String key) {
if (key.indexOf("http") == -1) {
OSSClient server = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 连接oss云存储服务器
// 设置URL过期时间为1年 3600l* 1000*24*365
Date expirations = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365);// url超时时间

// 生成URL
URL url = server.generatePresignedUrl(bucket, key, expirations);
String strUrl = String.valueOf(url);
// 关闭client
server.shutdown();
return splitUrl(strUrl);
} else {
return splitUrl(key);
}
}

/**
* 获取文件URL
*
* @Title getUrl
* @param @param
*            key
* @param @return
* @return URL
*/
public static String getUrlLongTime(String key) {
if (key.indexOf("http") == -1) {
OSSClient server = new OSSClient(endpoint, accessKeyId, accessKeySecret);// 连接oss云存储服务器
// 设置URL过期时间为100年 3600l* 1000*24*365*100
Date expirations = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 100);// url超时时间

// 生成URL
URL url = server.generatePresignedUrl(bucket, key, expirations);
String strUrl = String.valueOf(url);
// 关闭client
server.shutdown();
return splitUrl(strUrl);
} else {
return splitUrl(key);
}
}

/**
* 切割url
*
* @param url
* @return
*/
public static String splitUrl(String url) {
if (url.indexOf("?Expires") != -1) {
return url.split("Expires")[0].substring(0,url.split("Expires")[0].length() -1 );
}
return url;
}

}


自定义图片上传工具类

<
c034
span style="font-size:18px;">import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.multipart.MultipartFile;

/**
* @Title   UploadImageUtils.java
* @Package com.pro.huanbao.common.utils
* @author  wanpu_ly
* @dade    2017年11月7日 上午10:06:57
* @version V1.0
* 类说明:	图片上传至OSS
*/
public class UploadImageUtils {

/**
* 返回的是阿里云的图片全路径名数组,需要可以换成网络路径
* @param file
* @param request
* @return
* @throws Exception
*/
public static List<String> fildUpload(MultipartFile[] file,HttpServletRequest request) throws Exception {
// 上传图片到本地
// 获得物理路径webapp所在路径
String pathRoot = request.getSession().getServletContext()
.getRealPath("");
String path = "";
List<String> listImagePath = new ArrayList<String>();
for (MultipartFile mf : file) {
if (!mf.isEmpty()) {
// 生成uuid作为文件名称
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
// 获得文件类型(可以判断如果不是图片,禁止上传)
String contentType = mf.getContentType();
// 获得文件后缀名称
String imageName = contentType.substring(contentType
.indexOf("/") + 1);
String allImageName = uuid + uuid +"." + imageName;
// 文件在 /webapp/static/ 下暂存,上传至阿里云OSS后删除
path = "/static/" + allImageName;
mf.transferTo(new File(pathRoot + path));

// 调用方法 把上传到本地的图片上传到OS
String url = getImageUrl(request, path,uuid + allImageName);
listImagePath.add(url);
}
}
return listImagePath;
}

/**
* 上传图片到阿里云OS
* @Title   getImageUrl
* @param   @param request
* @param   @param path
* @param   @return
* @return  String
* @Explain
*/
public static String getImageUrl(HttpServletRequest request, String path,String fileName) {
@SuppressWarnings("deprecation")
String realPath = request.getRealPath(path);
String endPath = realPath.replace("\\", "\\\\");
File file = new File(endPath);
// 上传本地图片到OS

String[] strings = DateUtil.format(new Date(), "yyyy-MM-dd").split("-");
String imagePath = "img/"+strings[0]+"/"+strings[1]+"/"+strings[2]+"/"+fileName;
// 图片网络路径
String url = OssClientUtil.uploadPicLongTime(file, imagePath);
// 删除本地图片
file.delete();
// 需求返回阿里云OSS文件全路径名, 需要可返回url
return imagePath;
}
}


springmvc 接收方法

@RequestMapping("/uploadImage")
public String uploadImage(@RequestParam(value = "file", required = false) MultipartFile[] file,
HttpServletRequest request) {
try {
List<String> imgs = UploadImageUtils.fildUpload(file, request);
} catch (Exception e) {
e.printStackTrace();
}

return "";
}


图片上传html

<form action="/uploadImages" method="post" enctype="multipart/form-data">
<label></label><input type="file" name="file"/><br/>
<label></label><input type="file" name="file"/><br/>
<label></label><input type="file" name="file"/><br/>
<label></label><input type="file" name="file"/><br/>
<label></label><input type="file" name="file"/><br/>
<label></label><input type="file" name="file"/><br/>
<label></label><input type="file" name="file"/><br/>
<label></label><input type="file" name="file"/><br/>
<label></label><input type="file" name="file"/><br/>
<label></label><input type="file" name="file"/><br/> <br/>
<input type="submit" value="提  交"/>
</form>


注: name 和 type 都必须为 file

依赖jar包

maven依赖: 

<!-- 阿里云OS -->
<dependency>
<groupId>com.aliyun.oss3</groupId>
<artifactId>aliyun-sdk-oss3</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.hamcrest.core</groupId>
<artifactId>hamcrest-core</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.httpcore</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.1</version>
</dependency>
<dependency>
<groupId>com.jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.1</version>
</dependency>

<!-- 文件上传组件 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>


jar包下载: 

http://download.csdn.net/download/lxinccode/10265847
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: