diff --git a/CHANGELOG.md b/CHANGELOG.md
index d6a54526b0a13a0e14237c1451e5853b7ca781cd..8968530435a3c28d3a0f53ff20f5101757310c03 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 3.3.3
+- Fix empty upload error
+- Update README.md
+
 # 3.3.3-pre
 - Update stream file upload
 
diff --git a/README.md b/README.md
index ecfa3ea1b289475209f93097313b6f84b95aea82..b2bb908c3a0ae2b4c8a6d2ba4c4166122d1e43a0 100644
--- a/README.md
+++ b/README.md
@@ -76,6 +76,26 @@ For complete example, see: [example]
 
 > To use `fPutObject()` and `fGetObject`, you have to `import 'package:minio/io.dart';`
 
+**File upload with progress**
+```dart
+import 'package:minio/minio.dart';
+
+void main() async {
+  final minio = Minio(
+    endPoint: 'play.min.io',
+    accessKey: 'Q3AM3UQ867SPQQA43P2F',
+    secretKey: 'zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG',
+  );
+
+  await minio.putObject(
+    'mybucket', 
+    'myobject', 
+    Stream<Uint8List>.value(Uint8List(1024)),
+    onProgress: (bytes) => print('$bytes uploaded'),
+  );
+}
+```
+
 **Get object**
 
 ```dart
diff --git a/lib/src/utils.dart b/lib/src/utils.dart
index 307cf274f98bd8df36420d9da7b71fe997b24a76..0d43fe4909cf6beb526f2da684d604191da72eca 100644
--- a/lib/src/utils.dart
+++ b/lib/src/utils.dart
@@ -108,9 +108,7 @@ class MinChunkSize extends StreamTransformerBase<Uint8List, Uint8List> {
       yield buffer.takeBytes();
     }
 
-    if (buffer.isNotEmpty) {
-      yield buffer.takeBytes();
-    }
+    yield buffer.takeBytes();
   }
 }
 
diff --git a/pubspec.yaml b/pubspec.yaml
index 3f2abbf52b108d7214e60270c18b01b07e4e4353..f4c483eea1b1c87a894c916ad8fddc5b736e393f 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,6 +1,6 @@
 name: minio
 description: Unofficial MinIO Dart Client SDK that provides simple APIs to access any Amazon S3 compatible object storage server.
-version: 3.3.3-pre
+version: 3.3.3
 homepage: https://github.com/xtyxtyx/minio-dart
 issue_tracker: https://github.com/xtyxtyx/minio-dart/issues
 
diff --git a/test/minio_test.dart b/test/minio_test.dart
index 9a1df135c1dd0c94ebcd160a19c3fdd087ee3fcd..7b970c29caf3cc68d9e826f1b2ee78938bea7076 100644
--- a/test/minio_test.dart
+++ b/test/minio_test.dart
@@ -427,6 +427,22 @@ void testPutObject() {
       expect(stat.size, equals(dataLength));
     });
 
+    test('empty stream upload works', () async {
+      final objectName = uniqueName();
+      await minio.putObject(bucketName, objectName, Stream.empty());
+      final stat = await minio.statObject(bucketName, objectName);
+      await minio.removeObject(bucketName, objectName);
+      expect(stat.size, equals(0));
+    });
+
+    test('zero byte stream upload works', () async {
+      final objectName = uniqueName();
+      await minio.putObject(bucketName, objectName, Stream.value(Uint8List(0)));
+      final stat = await minio.statObject(bucketName, objectName);
+      await minio.removeObject(bucketName, objectName);
+      expect(stat.size, equals(0));
+    });
+
     test('multipart file upload works', () async {
       final objectName = uniqueName();
       final dataLength = 12 * 1024 * 1024;