UploadDataProvider

public abstract class UploadDataProvider extends Object
implements Closeable

一个抽象类,允许嵌入者向 UrlRequest 提供上传主体。它同时支持非分块(提前知道大小)和分块(提前不知道大小)上传。请注意,并非所有服务器都支持分块上传。

上传要么总是分块的(如果数据最终被发送多次,则在多次上传中分块),要么从不分块。

公共构造函数摘要

公共方法摘要

void
close()
当请求不再需要此 UploadDataProvider 时调用,以便可以显式释放资源(例如文件)。
abstract long
getLength()
如果这是非分块上传,则返回上传的长度。
abstract void
read(UploadDataSink uploadDataSink, ByteBuffer byteBuffer)
将上传数据读取到 byteBuffer 中。
abstract void
rewind(UploadDataSink uploadDataSink)
倒回上传数据。

继承的方法摘要

公共构造函数

public UploadDataProvider ()

公共方法

public void close ()

当请求不再需要此 UploadDataProvider 时调用,以便可以显式释放资源(例如文件)。

抛出
IOException 如果在进程中发生任何 IOException。如果请求尚未完成,这将导致请求失败;否则将记录日志。

public abstract long getLength ()

如果这是非分块上传,则返回上传的长度。如果是分块上传,则必须始终返回 -1。

返回
  • 非分块上传的上传长度,否则为 -1。
抛出
IOException 如果在进程中发生任何 IOException。

public abstract void read (UploadDataSink uploadDataSink, ByteBuffer byteBuffer)

将上传数据读取到 byteBuffer 中。完成后,缓冲区的位置会更新到已读取字节的末尾。缓冲区的大小限制不会改变。此方法的每次调用之后都必须对 uploadDataSink 进行一次(同步或异步)调用:成功时调用 UploadDataSink.onReadSucceeded(boolean),失败时调用 UploadDataSink.onReadError(Exception)。在调用这些方法之一之前,不会调用 read 或 rewind。即使关联的 UrlRequest 已取消,为了安全释放资源,仍必须调用这些方法之一。抛出异常也将导致资源被释放,并且请求将出错。

参数
uploadDataSink 读取成功或失败时要通知的对象。
byteBuffer 用于复制读取字节的缓冲区。不要改变 byteBuffer 的大小限制。
抛出
IOException 如果在进程中发生任何 IOException。UrlRequest.Callback.onFailed(UrlRequest, UrlResponseInfo, CronetException) 将被调用,并将抛出的异常设置为 CallbackException 的原因。

public abstract void rewind (UploadDataSink uploadDataSink)

倒回上传数据。每次调用之后都必须对 uploadDataSink 进行一次(同步或异步)调用:成功时调用 UploadDataSink.onRewindSucceeded(),失败时调用 UploadDataSink.onRewindError(Exception)。在调用这些方法之一之前,不会调用 read 或 rewind。即使关联的 UrlRequest 已取消,为了安全释放资源,仍必须调用这些方法之一。抛出异常也将导致资源被释放,并且请求将出错。

如果不支持倒回,则应调用 UploadDataSink.onRewindError(Exception)。请注意,倒回是遵循保留上传主体的重定向以及在服务器超时陈旧套接字时进行重试所必需的。

参数
uploadDataSink 倒回操作成功或失败时要通知的对象。
抛出
IOException 如果在进程中发生任何 IOException。UrlRequest.Callback.onFailed(UrlRequest, UrlResponseInfo, CronetException) 将被调用,并将抛出的异常设置为 CallbackException 的原因。