From a02bb3bff6e4b40f084076fb74eda4bf1280f9c0 Mon Sep 17 00:00:00 2001 From: xuty <xty50337@hotmail.com> Date: Sun, 29 Mar 2020 20:25:47 +0800 Subject: [PATCH] finish fGetObject & fPutObject --- README.md | 4 +-- example/custed.png | Bin 0 -> 15036 bytes example/minio_example.dart | 16 ++++----- example/teaweb.png | Bin 1707 -> 0 bytes lib/io.dart | 71 +++++++++++++++++++++++++++++++++++++ lib/src/minio.dart | 2 +- lib/src/minio_helpers.dart | 22 ++++++++++++ pubspec.yaml | 5 +-- 8 files changed, 107 insertions(+), 13 deletions(-) create mode 100644 example/custed.png delete mode 100644 example/teaweb.png create mode 100644 lib/io.dart diff --git a/README.md b/README.md index cb1ff60..bce04ad 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,9 @@ Created from templates made available by Stagehand under a BSD-style |----------------------- |------------------------ |---------------------- |----------------------------------------- | | `makeBucket` | `getObject` | presignedUrl | getBucketNotification | | `listBuckets` | `getPartialObject` | presignedGetObject | setBucketNotification | -| `bucketExists` | fGetObject | presignedPutObject | removeAllBucketNotification | +| `bucketExists` | `fGetObject` | presignedPutObject | removeAllBucketNotification | | `removeBucket` | `putObject` | presignedPostPolicy | getBucketPolicy | -| `listObjects` | fPutObject | | setBucketPolicy | +| `listObjects` | `fPutObject` | | setBucketPolicy | | `listObjectsV2` | `copyObject` | | listenBucketNotification | | `listIncompleteUploads` | `statObject` | | | | | `removeObject` | | | diff --git a/example/custed.png b/example/custed.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7f4c21e83607b8a2acb1e94c374c4c5c4b064b GIT binary patch literal 15036 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 literal 0 HcmV?d00001 diff --git a/example/minio_example.dart b/example/minio_example.dart index 882c397..dcf4563 100644 --- a/example/minio_example.dart +++ b/example/minio_example.dart @@ -1,5 +1,4 @@ -import 'dart:io'; - +import 'package:minio/io.dart'; import 'package:minio/minio.dart'; void main() async { @@ -12,9 +11,9 @@ void main() async { ); final bucket = '00test'; - final object = 'teaweb.png'; - final copy1 = '$object.copy1'; - final copy2 = '$object.copy2'; + final object = 'custed.png'; + final copy1 = 'custed.copy1.png'; + final copy2 = 'custed.copy2.png'; if (!await minio.bucketExists(bucket)) { await minio.makeBucket(bucket); @@ -27,9 +26,7 @@ void main() async { print('--- object region:'); print(region); - final file = File('example/$object'); - final size = await file.length(); - final etag = await minio.putObject(bucket, object, file.openRead(), size); + final etag = await minio.fPutObject(bucket, object, 'example/$object'); print('--- etag:'); print(etag); @@ -40,6 +37,9 @@ void main() async { print('--- copy2 etag:'); print(copyResult2.eTag); + await minio.fGetObject(bucket, object, 'example/$copy1'); + print('--- copy1 downloaded'); + await minio.listObjects(bucket).forEach((chunk) { print('--- objects:'); chunk.objects.forEach((o) => print(o.key)); diff --git a/example/teaweb.png b/example/teaweb.png deleted file mode 100644 index 84746b3b671c92a99bfe0bb17c9abd2a66b24ac6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1707 zcmaJ?Yfuws6b-LdXc=p<R<z0*R769v3C6HnB9A0Uv_ZsB6Rd@hEFnU&F<H!phdeB{ zf@qnxP8fBlVim*@G!CLop%xW^3REbs5uXS}r4*2t7}E^``lEDbcE88mbMCqKJKya7 z(2xzzPK%sKB$6{fm>Win4C_0`miXrGaO)-pSBxjZwxThZPNG3b0Wvfi0r*OZ90@}t zGX1U^#Fs>}Td5F=Fp=OhSc)pC5^D?<SE>m#iR9~tt0mGn1OuWGxkAMz_y1f;1{5+j zc^gvz3e+4VRuP=2LAEA_2&IW}Qb<PjTMzi+FhQV1FbRMw<5gN1XOky+VPbCGrjdck z5G;;Oel1EQ2n9H(1_7AVbzV}Cz7}9XR627V3t~|K2C=4rJ~RgC1wt^>8wMG`)I%n+ zX=E{Q7&mAt7qMcKV=+t((`Y)Kj;iyfq8d4k4nYtNWY8E4FCxNAt5;zX+)Jf(pJw19 zTB$~%#uTUuurf-b(FBZ5CX~J|L8+dhRcWW%L^O<sOVl(v6||N#9Vig|f2dM96RpL< zkT-h&lUOU%s}WilqD2!lQsUrZ+^wn9Fh_$(FjON%(fH{uhQ^{8s*Od}0EaW#H9#Pd zDpc0JNsK@M^Ho|*qLLzfE}KlSP!$Rp9LV&hdk3+&;JQFAoz8<GI+w)>gdos|K?fo3 z+G#8ol_n?=6*i5Py}|Nk#aiv4R1=xGh(@s+kp*c`B`{ewte9O(;H-R8SlR4aIJ07D zgczFjaNj!Y=`F%R*6ECOiN%ch5f$Nh4PkBDf$sUljakg+1_<$vXki_E0~{l{RQ+gQ zP`@alrO+63jQQm37I_YweYZYZCc7_lZ-E!QD6a{RTy<5PwKua!+G%dmt)H75d;UDQ z65iO2*A1#cV=1`OhyMrdqA1T5YBz`tu8=6NO>FRKGmMoR9LmMbKV5eI9?#T^AFM{W zJ|{EV@+&6zYveY2uWs4U$jyulILbMYpM&Rg?@WFgVmeh}#32Jahi4LeMSyD>sqWVT z%)!lvAA8O{+|xt$GmKvr7e1rt?2cnP*O-`~jUPVDue22PQrx7uLY<;^sJiY@WnnkP z(WVUd;6Kw?T>q{Z+x=wZ^rpEL$>Rf~qxlv;%gc%3o=8){$s@<X1@e?JK2we))m}J% z;$uza9?N!p*W>iM{(H&e&RtpmlsXMu7}PRsygff%>{1H+x-`PAaDK!-C*Q;@-`I?8 zZhP`B^wk(g{r+5W*>oUNAROzu4mmCw9%`+8y18OYwfM~KJF9X>ES5W+4P{4Ds_L$W zJ@i0}-Tjk)>qzSDY|T$CdPG^#9A&uF)86fko^2j)V$1By`8U`4TjJs2eLH_Rl(Fyx z=??yI_*4@b&m7-mJAYv?W!1qQma(JXJP(NvH;=kqJP9TCRlPJfV2Iu+`7uACsjBtf zX;o_At&x`O(MFT@uZ|>#dG%*P9iq0UEoc2Q{=8U!JtaEqBgb64yWYbkd_7P=3APb! z%#El`ofx>JxNatdxs+s<8q3=ZeG+|6-u|wgJ%f82n#%kf4!bY!CEuqkTiS93<nbIs z-nng4dM&biwEbLm|INm_jLKcD3yLY8bG*)8I;OXaZ_GP0NT28A9o3uK)$uj&-7ig+ z7e~@5X$|7C2wOGFW@zO19h;Xuke7Hx6?g(3wdtQPF`FkWH@+*GC^7l%e&jw-bVMfa z)W2FHA~6_@iiyFbj*;pQ0)QlQO{>5Cvzj>?W7d$-aj?{68SELZjzlY8y|Uz|uTGn1 z`IcIG#bICjx%c|-ri|b6-{23_*iG23IcWN%FZ>W3*DRj4ewvYF`#y>Hg?({0i}%#} O`{46JxaR_+GX4d<)xGQh diff --git a/lib/io.dart b/lib/io.dart new file mode 100644 index 0000000..26f5ebf --- /dev/null +++ b/lib/io.dart @@ -0,0 +1,71 @@ +import 'dart:io'; + +import 'package:minio/src/minio.dart'; +import 'package:minio/src/minio_errors.dart'; +import 'package:minio/src/minio_helpers.dart'; +import 'package:path/path.dart' show dirname; + +extension MinioX on Minio { + Future<String> fPutObject( + String bucket, + String object, + String filePath, [ + Map<String, String> metaData, + ]) async { + MinioInvalidBucketNameError.check(bucket); + MinioInvalidObjectNameError.check(object); + + metaData ??= {}; + metaData = insertContentType(metaData, filePath); + metaData = prependXAMZMeta(metaData); + + final file = File(filePath); + final stat = await file.stat(); + if (stat.size > maxObjectSize) { + throw MinioError( + '${filePath} size : ${stat.size}, max allowed size : 5TB', + ); + } + + return putObject(bucket, object, file.openRead(), stat.size); + } + + Future<void> fGetObject( + String bucket, + String object, + String filePath, + ) async { + MinioInvalidBucketNameError.check(bucket); + MinioInvalidObjectNameError.check(object); + + final stat = await statObject(bucket, object); + final dir = dirname(filePath); + await Directory(dir).create(recursive: true); + + final partFileName = '${filePath}.${stat.etag}.part.minio'; + final partFile = File(partFileName); + IOSink partFileStream; + var offset = 0; + + final rename = () => partFile.rename(filePath); + + if (await partFile.exists()) { + final localStat = await partFile.stat(); + if (stat.size == localStat.size) return rename(); + offset = localStat.size; + partFileStream = partFile.openWrite(mode: FileMode.append); + } else { + partFileStream = partFile.openWrite(mode: FileMode.write); + } + + final dataStream = await getPartialObject(bucket, object, offset); + await dataStream.pipe(partFileStream); + + final localStat = await partFile.stat(); + if (localStat.size != stat.size) { + throw MinioError('Size mismatch between downloaded file and the object'); + } + + return rename(); + } +} diff --git a/lib/src/minio.dart b/lib/src/minio.dart index d3551de..787e13d 100644 --- a/lib/src/minio.dart +++ b/lib/src/minio.dart @@ -382,7 +382,7 @@ class Minio { return latestUpload?.uploadId; } - + Future<String> getBucketRegion(String bucket) async { MinioInvalidBucketNameError.check(bucket); diff --git a/lib/src/minio_helpers.dart b/lib/src/minio_helpers.dart index c0e7277..5c0bf54 100644 --- a/lib/src/minio_helpers.dart +++ b/lib/src/minio_helpers.dart @@ -1,3 +1,5 @@ +import 'package:mime/mime.dart' show lookupMimeType; + bool isValidBucketName(String bucket) { if (bucket == null) return false; @@ -170,3 +172,23 @@ Map<String, String> extractMetadata(Map<String, String> metaData) { } return newMetadata; } + +String probeContentType(String path) { + final contentType = lookupMimeType(path); + return contentType ?? 'application/octet-stream'; +} + +Map<String, String> insertContentType( + Map<String, String> metaData, + String filePath, +) { + for (var key in metaData.keys) { + if (key.toLowerCase() == 'content-type') { + return metaData; + } + } + + final newMetadata = Map<String, String>.from(metaData); + newMetadata['content-type'] = probeContentType(filePath); + return newMetadata; +} diff --git a/pubspec.yaml b/pubspec.yaml index cccb171..3bd02a1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,7 @@ version: 0.1.0 author: xuty <root@xuty.tk> environment: - sdk: ">=2.5.0 <3.0.0" + sdk: ">=2.7.0 <3.0.0" dependencies: meta: ^1.1.7 @@ -15,7 +15,8 @@ dependencies: xml: ^3.7.0 buffer: ^1.0.6 intl: ^0.16.1 -# path: ^1.6.0 + mime: ^0.9.6+3 + path: ^1.6.0 dev_dependencies: pedantic: ^1.8.0 -- GitLab