1

我尝试使用代码在 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();
        }
    }
4

1 回答 1

2

尝试使用 CustomInputStream 获取读取数据的状态并使用 service 显示它。

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);
于 2015-09-19T09:57:09.307 回答