我尝试使用this代码在Android上的GCS上传文件。此代码运行正常,并在存储桶上传文件。 现在我想检查暂停,恢复和互联网开/关处理的进度。 我在互联网上搜索很多,但没有找到任何完美的解决方案。
代码
CloudStorage.uploadFile("upload-recording", "/storage/sdcard0/Download/images.jpg",this,file);
public static void uploadFile(String bucketName, String filePath,Context context,File file_use)
throws Exception {
this_context = context;
this_file = file_use;
Storage storage = getStorage();
StorageObject object = new StorageObject();
object.setBucket(bucketName);
File file = new File(filePath);
InputStream stream = new FileInputStream(file);
try {
String contentType = URLConnection
.guessContentTypeFromStream(stream);
InputStreamContent content = new InputStreamContent(contentType,
stream);
Storage.Objects.Insert insert = storage.objects().insert(
bucketName, null, content);
insert.setName(file.getName());
insert.execute();
} finally {
stream.close();
}
}
答案 0 :(得分:2)
尝试使用CustomInputStream获取读取数据的状态并使用服务显示它。
public class ProgressNotifyingInputStream extends InputStream {
private InputStream wrappedStream;
private int count = 0;
private int totalSize;
File file;
public ProgressNotifyingInputStream(File file)
{
this.file=file;
}
/**
* Creates a new notifying outputstream which wraps an existing one.
* When you write to this stream the callback will be notified each time when
* updateAfterNumberBytes is written.
*
* @param stream the outputstream to be wrapped
* @param totalSize the totalsize that will get written to the stream
*/
wrappedStream = new FileInputStream(file);
public ProgressNotifyingInputStream(InputStream stream, int totalSize) {
if(stream==null) {
throw new NullPointerException();
}
if(totalSize == 0) {
throw new IllegalArgumentException("totalSize argument cannot be zero");
}
this.wrappedStream = stream;
this.totalSize = totalSize;
}
@Override
public int read() throws IOException {
count++;
return wrappedStream.read();
}
/**
* Get progress from 0 to 100
* @return
*/
public int getProgress() {
return count * 100 / totalSize;
}
}
我的代码只需致电
InputStream stream=new ProgressNotifyingInputStream (file);