Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

examples: Implement console progress bar for GetObject #554

Merged
merged 1 commit into from
Apr 16, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
78 changes: 78 additions & 0 deletions examples/GetObjectProgressBar.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
/*
* Minio Java SDK for Amazon S3 Compatible Cloud Storage, (C) 2017 Minio, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import org.xmlpull.v1.XmlPullParserException;

import com.google.common.io.ByteStreams;

import io.minio.MinioClient;
import io.minio.ObjectStat;
import io.minio.errors.MinioException;
import me.tongfei.progressbar.ProgressBarStyle;

public class GetObjectProgressBar {
/**
* MinioClient.getObjectProgressBar() example.
*/
public static void main(String[] args)
throws IOException, NoSuchAlgorithmException, InvalidKeyException, XmlPullParserException {
try {
/* play.minio.io for test and development. */
MinioClient minioClient = new MinioClient("https://play.minio.io:9000",
"Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG");

/* Amazon S3: */
// MinioClient minioClient = new MinioClient("https://s3.amazonaws.com", "YOUR-ACCESSKEYID",
// "YOUR-SECRETACCESSKEY");

// Check whether the object exists using statObject(). If the object is not found,
// statObject() throws an exception. It means that the object exists when statObject()
// execution is successful.

// Get object stat information.
ObjectStat objectStat = minioClient.statObject("testbucket", "resumes/4.original.pdf");

// Get input stream to have content of 'my-objectname' from 'my-bucketname'
InputStream is = new ProgressStream("Downloading .. ", ProgressBarStyle.ASCII,
objectStat.length(), minioClient.getObject("my-bucketname", "my-objectname"));

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like this getObject() function does not yet exist in the latest deployed version?
I'm using this:

        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>3.0.3</version>
        </dependency>

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Of course it does @danyaljj getObject has been implemented has been implemented in first release of minio-java.

What you are looking for is perhaps ProgressStream() - this is just an example you should copy paste the ProgressStream.java wherever needed and use it with inputStreams to generate progress bar.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what I mean is, getObject with two string parameters.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh no it's there. Found it.


Path path = Paths.get("my-filename");
OutputStream os = Files.newOutputStream(path, StandardOpenOption.CREATE);

long bytesWritten = ByteStreams.copy(is, os);
is.close();
os.close();

if (bytesWritten != objectStat.length()) {
throw new IOException(path + ": unexpected data written. expected = " + objectStat.length()
+ ", written = " + bytesWritten);
}

} catch (MinioException e) {
System.out.println("Error occurred: " + e);
}
}
}
37 changes: 28 additions & 9 deletions examples/ProgressStream.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,40 @@ public class ProgressStream extends InputStream {
private ProgressBar pb;

/**
* ProgressStream implements an extends InputStream while
* also writing out the read progress on console. ProgressStream
* can be used as a direct replacement for any InputStream compatible
* ProgressStream implements an extends InputStream while also writing out the read progress on
* console. ProgressStream can be used as a direct replacement for any InputStream compatible
* input.
*
* @param msg Custom message string.
* @param style Custom progress bar style.
* @param stream InputStream to be wrapped.
* @throws IOException For any exception generated by the InputStream.
*/
public ProgressStream(String msg, ProgressBarStyle style, InputStream stream) throws IOException {
this(msg, style, (long)stream.available(), stream);
}

/**
* ProgressStream implements an extends InputStream while also writing out the read progress on
* console. ProgressStream can be used as a direct replacement for any InputStream compatible
* input.
*
* @param msg Custom message string.
* @param style Custom progress bar style.
* @param size Size of the progress bar.
* @param stream InputStream to be wrapped.
* @throws IOException For any exception generated by the InputStream.
*/
public ProgressStream(String msg, ProgressBarStyle style, long size, InputStream stream)
throws IOException {
super();

// Allocate the reader.
this.in = stream;

// Initialize progress bar.
this.pb = new ProgressBar(msg, stream.available(), style);
this.pb = new ProgressBar(msg, size, style);
this.pb.start();

}

@Override
Expand All @@ -64,14 +81,16 @@ public int read() throws IOException {

@Override
public int read(byte[] toStore) throws IOException {
this.pb.stepBy(toStore.length); // Update progress bar.
return this.in.read(toStore);
int readBytes = this.in.read(toStore);
this.pb.stepBy(readBytes); // Update progress bar.
return readBytes;
}

@Override
public int read(byte[] toStore, int off, int len) throws IOException {
this.pb.stepBy(toStore.length);
return this.in.read(toStore, off, len);
int readBytes = this.in.read(toStore, off, len);
this.pb.stepBy(readBytes);
return readBytes;
}

@Override
Expand Down