11package samples ;
22
3- import java .io .File ;
3+ import java .io .ByteArrayInputStream ;
44import java .io .IOException ;
5+ import java .io .InputStream ;
56
67import com .aliyun .oss .ClientException ;
8+ import com .aliyun .oss .InconsistentException ;
79import com .aliyun .oss .OSSClient ;
810import com .aliyun .oss .OSSException ;
9- import com .aliyun .oss .model .GetObjectRequest ;
11+ import com .aliyun .oss .common .utils .IOUtils ;
12+ import com .aliyun .oss .internal .OSSUtils ;
13+ import com .aliyun .oss .model .AppendObjectRequest ;
14+ import com .aliyun .oss .model .AppendObjectResult ;
15+ import com .aliyun .oss .model .OSSObject ;
16+ import com .aliyun .oss .model .UploadFileRequest ;
17+ import junit .framework .Assert ;
1018
1119/**
12- * 断点续传下载用法示例
20+ * 上传/下载数据校验用法示例
1321 *
1422 */
15- public class ImageSample {
23+ public class CRCSample {
1624
1725 private static String endpoint = "<endpoint, http://oss-cn-hangzhou.aliyuncs.com>" ;
1826 private static String accessKeyId = "<accessKeyId>" ;
1927 private static String accessKeySecret = "<accessKeySecret>" ;
2028 private static String bucketName = "<bucketName>" ;
21- private static String key = "example.jpg" ;
22-
29+ private static String uploadFile = "<uploadFile>" ;
30+ private static String key = "crc-sample.txt" ;
31+
2332
24- public static void main (String [] args ) throws IOException {
33+ public static void main (String [] args ) throws IOException {
34+
35+ String content = "Hello OSS, Hi OSS, OSS OK." ;
2536
37+ // 上传/下载默认开启CRC校验,如果不需要,请关闭CRC校验功能
38+ // ClientConfiguration config = new ClientConfiguration();
39+ // config.setCrcCheckEnabled(false);
40+ // OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
2641 OSSClient ossClient = new OSSClient (endpoint , accessKeyId , accessKeySecret );
2742
2843 try {
29- // 缩放
30- String style = "image/resize,m_fixed,w_100,h_100" ;
31- GetObjectRequest request = new GetObjectRequest (bucketName , key );
32- request .setProcess (style );
33-
34- ossClient .getObject (request , new File ("example-resize.jpg" ));
35-
36- // 裁剪
37- style = "image/crop,w_100,h_100,x_100,y_100,r_1" ;
38- request = new GetObjectRequest (bucketName , key );
39- request .setProcess (style );
40-
41- ossClient .getObject (request , new File ("example-crop.jpg" ));
42-
43- // 旋转
44- style = "image/rotate,90" ;
45- request = new GetObjectRequest (bucketName , key );
46- request .setProcess (style );
44+
45+ // 开启CRC校验后,上传(putObject/uploadPart/uploadFile)自动开启CRC校验,使用方法与原来相同。
46+ // appendObject需要出AppendObjectRequest.setInitCRC才会CRC校验
47+ ossClient .putObject (bucketName , key , new ByteArrayInputStream (content .getBytes ()));
48+ ossClient .deleteObject (bucketName , key );
4749
48- ossClient .getObject (request , new File ("example-rotate.jpg" ));
50+ // 追加上传,第一次追加
51+ AppendObjectRequest appendObjectRequest = new AppendObjectRequest (bucketName , key ,
52+ new ByteArrayInputStream (content .getBytes ())).withPosition (0L );
4953
50- // 锐化
51- style = "image/sharpen,100" ;
52- request = new GetObjectRequest (bucketName , key );
53- request .setProcess (style );
54+ appendObjectRequest .setInitCRC (0L );
55+ AppendObjectResult appendObjectResult = ossClient .appendObject (appendObjectRequest );
5456
55- ossClient .getObject (request , new File ("example-sharpen.jpg" ));
57+ // 追加上传,第二次追加
58+ appendObjectRequest = new AppendObjectRequest (bucketName , key ,
59+ new ByteArrayInputStream (content .getBytes ()));
60+ appendObjectRequest .setPosition (appendObjectResult .getNextPosition ());
61+ appendObjectRequest .setInitCRC (appendObjectResult .getClientCRC ());
62+ appendObjectResult = ossClient .appendObject (appendObjectRequest );
5663
57- // 水印
58- style = "image/watermark,text_SGVsbG8g5Zu-54mH5pyN5YqhIQ" ;
59- request = new GetObjectRequest (bucketName , key );
60- request .setProcess (style );
64+ ossClient .deleteObject (bucketName , key );
6165
62- ossClient .getObject (request , new File ("example-watermark.jpg" ));
66+ // 断点续传上传,支持CRC校验
67+ UploadFileRequest uploadFileRequest = new UploadFileRequest (bucketName , key );
68+ // 待上传的本地文件
69+ uploadFileRequest .setUploadFile (uploadFile );
70+ // 设置并发下载数,默认1
71+ uploadFileRequest .setTaskNum (5 );
72+ // 设置分片大小,默认100KB
73+ uploadFileRequest .setPartSize (1024 * 1024 * 1 );
74+ // 开启断点续传,默认关闭
75+ uploadFileRequest .setEnableCheckpoint (true );
6376
64- // 格式转换
65- style = "image/format,png" ;
66- request = new GetObjectRequest (bucketName , key );
67- request .setProcess (style );
77+ ossClient .uploadFile (uploadFileRequest );
6878
69- ossClient .getObject (request , new File ("example-format.png" ));
79+ // 下载CRC校验,注意范围下载不支持CRC校验,downloadFile不支持CRC校验
80+ OSSObject ossObject = ossClient .getObject (bucketName , key );
81+ Assert .assertNull (ossObject .getClientCRC ());
82+ Assert .assertNotNull (ossObject .getServerCRC ());
7083
71- // 图片信息
72- style = "image/info" ;
73- request = new GetObjectRequest ( bucketName , key );
74- request . setProcess ( style );
84+ InputStream stream = ossObject . getObjectContent ();
85+ while ( stream . read () != - 1 ) {
86+ }
87+ stream . close ( );
7588
76- ossClient .getObject (request , new File ("example-info.txt" ));
89+ // 校验CRC是否一致
90+ OSSUtils .checkChecksum (IOUtils .getCRCValue (stream ), ossObject .getServerCRC (), ossObject .getRequestId ());
7791
92+ ossClient .deleteObject (bucketName , key );
93+
7894 } catch (OSSException oe ) {
7995 System .out .println ("Caught an OSSException, which means your request made it to OSS, "
8096 + "but was rejected with an error response for some reason." );
@@ -87,6 +103,9 @@ public static void main(String[] args) throws IOException {
87103 + "a serious internal problem while trying to communicate with OSS, "
88104 + "such as not being able to access the network." );
89105 System .out .println ("Error Message: " + ce .getMessage ());
106+ } catch (InconsistentException ie ) {
107+ System .out .println ("Caught an OSSException" );
108+ System .out .println ("Request ID: " + ie .getRequestId ());
90109 } catch (Throwable e ) {
91110 e .printStackTrace ();
92111 } finally {
0 commit comments