最近在用JFinal写博客,想要把图片上传到阿里云,我是很懒的,百度了下居然没有jfinal+OSS的例子,只能自己写了.....
Controller:
/**
* 阿里云上传图片Controller
*/
public class AliOssController extends Controller {
private static Prop p = PropKit.use("aliyun.txt");
public void index() throws Exception {
OSSClient ossClient = FileUtil.getOSSClient();
UploadFile uploadFile = getFile();
File file = new File(uploadFile.getUploadPath() + "/" + uploadFile.getOriginalFileName());
String picUrl = FileUtil.uploadImg(ossClient, file, p.get("BACKET_NAME"), p.get("FOLDER"));
renderJson(picUrl);
}
}FileUtils:
public class FileUtil {
private static Prop p = PropKit.use("aliyun.txt");
public static OSSClient getOSSClient() {
return new OSSClient(p.get("ENDPOINT"), p.get("ACCESS_KEY_ID"), p.get("ACCESS_KEY_SECRET"));
}
public static String uploadImg(OSSClient ossClient, File file, String bucketName, String folder) {
String url = null;
try {
// 以输入流的形式上传文件
InputStream is = new FileInputStream(file);
// 文件名
String fileName = file.getName();
fileName = UUID.randomUUID().toString().replaceAll("-","") + fileName;
// 文件大小
Long fileSize = file.length();
// 创建上传Object的Metadata
ObjectMetadata metadata = new ObjectMetadata();
// 上传的文件的长度
metadata.setContentLength(is.available());
// 指定该Object被下载时的网页的缓存行为
metadata.setCacheControl("no-cache");
// 指定该Object下设置Header
metadata.setHeader("Pragma", "no-cache");
// 指定该Object被下载时的内容编码格式
metadata.setContentEncoding("utf-8");
// 文件的MIME,定义文件的类型及网页编码,决定浏览器将以什么形式、什么编码读取文件。如果用户没有指定则根据Key或文件名的扩展名生成,
// 如果没有扩展名则填默认值application/octet-stream
metadata.setContentType(getContentType(fileName));
// 指定该Object被下载时的名称(指示MINME用户代理如何显示附加的文件,打开或下载,及文件名称)
metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");
// 上传文件 (上传文件流的形式)
PutObjectResult putResult = ossClient.putObject(bucketName, folder + fileName, is, metadata);
// 解析结果
url = "https://" + p.get("BACKET_NAME") + "." + p.get("ENDPOINT") + "/" + p.get("FOLDER") + fileName;
System.out.println("上传的文件路径:" + url);
return url;
} catch (Exception e) {
e.printStackTrace();
System.out.println("上传阿里云异常");
}
return url;
}
public static String getContentType(String fileName) {
// 文件的后缀名
String fileExtension = fileName.substring(fileName.lastIndexOf("."));
if (".bmp".equalsIgnoreCase(fileExtension)) {
return "image/bmp";
}
if (".gif".equalsIgnoreCase(fileExtension)) {
return "image/gif";
}
if (".jpeg".equalsIgnoreCase(fileExtension) || ".jpg".equalsIgnoreCase(fileExtension)
|| ".png".equalsIgnoreCase(fileExtension)) {
return "image/jpeg";
}
if (".html".equalsIgnoreCase(fileExtension)) {
return "text/html";
}
if (".txt".equalsIgnoreCase(fileExtension)) {
return "text/plain";
}
if (".vsd".equalsIgnoreCase(fileExtension)) {
return "application/vnd.visio";
}
if (".ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension)) {
return "application/vnd.ms-powerpoint";
}
if (".doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension)) {
return "application/msword";
}
if (".xml".equalsIgnoreCase(fileExtension)) {
return "text/xml";
}
// 默认返回类型
return "image/jpeg";
}这里用到了OSS四个配置,没做过的,百度一下就知道是什么意思了
#阿里云oss配置 ENDPOINT= ACCESS_KEY_ID= ACCESS_KEY_SECRET= BACKET_NAME= FOLDER=

每天在俱乐部提问,那么多大佬帮忙解答,so...分享个例子帮助下比我还白的小白~~~
排版可能有些乱,拉到idea里格式化一下就好
欢迎更多的小伙伴加入JFinal俱乐部一起学习~~
或者前端直接上传oss 七牛 会更好 直接不走自己服务器了