由于本人前端时间花了7块钱买了两年的阿里云OSS ,搞了一下发现这玩意儿 除了阿里云的ESC服务器 内网链接免费。 基本上没什么用 因为其他公共读写均属于收费。 刚好本人也对阿里云服务器垂涎已久 早就想下手。可出于贫穷 迟迟未肯解囊 ...终于在一次风和日丽的上午 趁着冥想之际 帕金森抖手没有按耐住 点了一下支付 ,买了个3年的同地域的 ESC服务器 。。 切记这个一定得是同地域的 才能连接内网 。。废话不多说了 有些代码都是从别的地方搬运的 零零碎碎的 就不贴上地址了 。上例子吧
JFinal的上传方法 ----------------------------------------------------
List<Record> l = new ArrayList<Record>(); Map<String, Object> map = new HashMap<String, Object>(); UploadFile file2 = getFile("file","video");//JFinal文件自动上传video路径 OSSClient ossClient = OSSUtil.getOSSClient(); String picUrl = OSSUtil.uploadImg(ossClient, file2.getFile(), "mawenjie01","video/"); // OSS上传方法 file2.getFile().delete();// 删除项目下面的视频 只保留OSS的 Record r = new Record(); r.set("imgname", file2.getOriginalFileName()); r.set("url",picUrl); l.add(r); map.put("code", "200"); map.put("count", 1); map.put("url", l); this.renderJson(map);
OSSUtil 类 ----------------------------------------------
package com.wenjie.util; import com.aliyun.oss.OSS; import com.aliyun.oss.OSSClient; import com.aliyun.oss.OSSClientBuilder; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectResult; import com.jfinal.kit.Prop; import com.jfinal.kit.PropKit; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.net.URL; import java.util.Date; import java.util.UUID; public class OSSUtil { 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."); // 上传文件 (上传文件流的形式) ossClient.putObject(bucketName, folder + fileName, is, metadata); // Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "oss-cn-beijing.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。 String accessKeyId = p.get("ACCESS_KEY_ID"); String accessKeySecret = p.get("ACCESS_KEY_SECRET"); // 创建OSSClient实例。 OSS ossClient2 = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); //设置过期时间 -- 十年 Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10); // 生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。 URL url2 = ossClient2.generatePresignedUrl(bucketName, folder + fileName, expiration); // 关闭OSSClient。 ossClient2.shutdown(); System.out.println("上传的文件路径:" + url2); // 关闭OSSClient。 ossClient.shutdown(); return url2.toString(); } 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"; } }