packagecom.aliyun.oss.demo;import java.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;import java.io.*;importjava.net.URL;importjava.util.List;importjava.util.Date;importjava.util.Random;importcom.aliyun.oss.ClientException;importcom.aliyun.oss.OSSClient;importcom.aliyun.oss.OSSException;import com.aliyun.oss.model.*;importorg.apache.log4j.Logger;importorg.apache.log4j.PropertyConfigurator;import javax.swing.*;public class HelloOSS extends JFrame implementsActionListener {static Logger logger = Logger.getLogger(HelloOSS.class);//endpoint是访问OSS的域名。如果您已经在OSS的控制台上 创建了Bucket,请在控制台上查看域名。//如果您还没有创建Bucket,endpoint选择请参看文档中心的“开发人员指南 > 基本概念 > 访问域名”,//链接地址是:https://help.aliyun.com/document_detail/oss/user_guide/oss_concept/endpoint.html?spm=5176.docoss/user_guide/endpoint_region
//endpoint的格式形如“http://oss-cn-hangzhou.aliyuncs.com/”,注意http://后不带bucket名称,//比如“http://bucket-name.oss-cn-hangzhou.aliyuncs.com”,是错误的endpoint,请去掉其中的“bucket-name”。
private static String endpoint = "";//accessKeyId和accessKeySecret是OSS的访问密钥,您可以在控制台上创建和查看,//创建和查看访问密钥的链接地址是:https://ak-console.aliyun.com/#/。//注意:accessKeyId和accessKeySecret前后都没有空格,从控制台复制时请检查并去除多余的空格。
private static String accessKeyId = "";private static String accessKeySecret = "";//Bucket用来管理所存储Object的存储空间,详细描述请参看“开发人员指南 > 基本概念 > OSS基本概念介绍”。//Bucket命名规范如下:只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
private static String bucketName = "";
JButton jb= new JButton("选择文件");public static voidmain(String[] args) {//TODO 自动生成的方法存根
newHelloOSS();
}publicHelloOSS() {
jb.setActionCommand("open");//设置按钮颜色
jb.setBackground(Color.LIGHT_GRAY);//建立容器使用边界布局
this.getContentPane().add(jb, BorderLayout.SOUTH);
jb.addActionListener(this);this.setTitle("标题");this.setSize(333, 288);this.setLocation(200, 200);//显示窗口true
this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Overridepublic voidactionPerformed(ActionEvent e) {if (e.getActionCommand().equals("open")) {
JFileChooser jf= newJFileChooser();//显示打开的文件对话框
jf.showOpenDialog(this);//使用文件类获取选择器选择的文件
File f =jf.getSelectedFile();//返回路径名
String s =f.getAbsolutePath();//JOptionPane弹出对话框类,显示绝对路径名//JOptionPane.showMessageDialog(this, s, "标题",JOptionPane.WARNING_MESSAGE);
uploadPicture(s);
}
}public voiduploadPicture(String path) {//日志配置,OSS Java SDK使用log4j记录错误信息。示例程序会在工程目录下生成“oss-demo.log”日志文件,默认日志级别是INFO。//日志的配置文件是“conf/log4j.properties”,如果您不需要日志,可以没有日志配置文件和下面的日志配置。
PropertyConfigurator.configure("conf/log4j.properties");
logger.info("Started");//生成OSSClient,您可以指定一些参数,详见“SDK手册 > Java-SDK > 初始化”,//链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/init.html?spm=5176.docoss/sdk/java-sdk/get-start
OSSClient ossClient = newOSSClient(endpoint, accessKeyId, accessKeySecret);try{/*校验存储空间*/
//判断Bucket是否存在。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。//链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
if(ossClient.doesBucketExist(bucketName)) {
System.out.println("您已经创建Bucket:" + bucketName + "。");
}else{
System.out.println("您的Bucket不存在,创建Bucket:" + bucketName + "。");//创建Bucket。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。//链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
ossClient.createBucket(bucketName);
}//查看Bucket信息。详细请参看“SDK手册 > Java-SDK > 管理Bucket”。//链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_bucket.html?spm=5176.docoss/sdk/java-sdk/init
BucketInfo info =ossClient.getBucketInfo(bucketName);
System.out.println("Bucket " + bucketName + "的信息如下:");
System.out.println("\t数据中心:" +info.getBucket().getLocation());
System.out.println("\t创建时间:" +info.getBucket().getCreationDate());
System.out.println("\t用户标志:" +info.getBucket().getOwner());/*上传本地图片*/
//图片全路径
String filePath =path;//上传文件全名称
String newFileKey = getStringRandom(32) +getContentType(filePath);
InputStream inputStream= newFileInputStream(filePath);//上传流文件
ossClient.putObject(bucketName, "xxxx/" +newFileKey, inputStream);//设置URL过期时间为1小时。
Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);//生成以GET方法访问的签名URL,访客可以直接通过浏览器访问相关内容。
URL url = ossClient.generatePresignedUrl(bucketName, "xxxx/" +newFileKey, expiration);
System.out.println(url);/*遍历存储空间*/
//查看Bucket中的Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。//链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_object.html?spm=5176.docoss/sdk/java-sdk/manage_bucket
//指定前缀。
final String keyPrefix = "xxxx";//列举包含指定前缀的文件。默认列举100个文件。
ObjectListing objectListing = ossClient.listObjects(newListObjectsRequest(bucketName).withPrefix(keyPrefix));
List sums =objectListing.getObjectSummaries();
System.out.println("您有以下Object:");for(OSSObjectSummary s : sums) {
System.out.println("\t" +s.getKey());
}/*下载文件到本地*/
//下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。//ossClient.getObject(new GetObjectRequest(bucketName, "xxxx/"+newFileKey), new File("G://oss//"+newFileKey));
/*删除空间文件*/
//删除Object。详细请参看“SDK手册 > Java-SDK > 管理文件”。//链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/manage_object.html?spm=5176.docoss/sdk/java-sdk/manage_bucket
//ossClient.deleteObject(bucketName, newFileKey);//System.out.println("删除Object:" + newFileKey + "成功。");
}catch(OSSException oe) {
oe.printStackTrace();
}catch(ClientException ce) {
ce.printStackTrace();
}catch(Exception e) {
e.printStackTrace();
}finally{
ossClient.shutdown();
}
logger.info("Completed");
}/*** 生成随机数字和字母,
*
*@param*@return*@authorGuoyh
* @date 2018/10/10 12:25*/
public static String getStringRandom(intlength) {
String val= "";
Random random= newRandom();//参数length,表示生成几位随机数
for (int i = 0; i < length; i++) {
String charOrNum= random.nextInt(2) % 2 == 0 ? "char" : "num";//输出字母还是数字
if ("char".equalsIgnoreCase(charOrNum)) {//输出是大写字母还是小写字母
int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
val+= (char) (random.nextInt(26) +temp);
}else if ("num".equalsIgnoreCase(charOrNum)) {
val+= String.valueOf(random.nextInt(10));
}
}returnval;
}/*** 通过文件名判断并获取OSS服务文件上传时文件的contentType
*
*@paramfileName 文件名
*@return文件的contentType*/
public staticString getContentType(String fileName) {//文件的后缀名
String fileExtension = fileName.substring(fileName.lastIndexOf("."));if (".bmp".equalsIgnoreCase(fileExtension)) {return ".bmp";
}if (".gif".equalsIgnoreCase(fileExtension)) {return ".gif";
}if (".jpeg".equalsIgnoreCase(fileExtension)) {return ".jpeg";
}if (".jpg".equalsIgnoreCase(fileExtension)) {return ".jpg";
}if (".png".equalsIgnoreCase(fileExtension)) {return ".png";
}//默认返回类型
return ".jpeg";
}
}