我正在尝试将文件发送到服务器。我得到一个Uri,用inputstream
获得getContentResolver().openInputStream(uri)
,然后继续读取文件的块并通过多个部分将它们发送到服务器。
一切正常,直到我尝试发送的文件大于2GB。当文件超过该值时,该过程正常工作直到~2gb,然后调用.read()的结果为-1,即使该文件远未完全读取。
搜索网络后,我发现inputstream
次读取仅限于Integer.MAX_VALUE
。但我没有找到解决办法。所以我想我的问题是,是否有一些方法可以让我阅读过2gb?
以下是提到的代码:
InputStream is = getContentResolver().openInputStream(fileUri);
if (is != null) {
byte[] buffer;
int maxBufferSize = AppController.UPLOAD_CHUNK_SIZE;
buffer = new byte[maxBufferSize];
int fileChunk = 0;
int read;
while ((read = is.read(buffer)) != -1) {
boolean didSend = sendMultipartChunk(upFile, fileChunk, buffer);
if (didSend) {
fileChunk++;
} else {
uploadedFiles.add(new UploadableFileDTO(true));
checkIfFinished();
break;
}
}
is.close();
sendEndUpload(upFile);