1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-08 16:36:13 +00:00

Upload chunks

This commit is contained in:
davigonz 2018-06-28 13:57:48 +02:00
parent b99723205b
commit 0b9a79491f
4 changed files with 43 additions and 9 deletions

View File

@ -24,8 +24,11 @@
package com.owncloud.android.lib.common.network;
import android.util.Log;
import com.owncloud.android.lib.common.utils.Log_OC;
import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.Iterator;
@ -33,9 +36,14 @@ import java.util.Iterator;
import okhttp3.MediaType;
import okio.BufferedSink;
/**
* A Request body that represents a file chunk and include information about the progress when uploading it
*
* @author David González Verdugo
*/
public class ChunkFromFileRequestBody extends FileRequestBody {
private static final String TAG = ChunkFromFileChannelRequestEntity.class.getSimpleName();
private static final String TAG = ChunkFromFileRequestBody.class.getSimpleName();
//private final File mFile;
private final FileChannel mChannel;
@ -58,6 +66,10 @@ public class ChunkFromFileRequestBody extends FileRequestBody {
mTransferred = 0;
}
@Override
public long contentLength() {
return mChunkSize;
}
@Override
public void writeTo(BufferedSink sink) {
@ -70,8 +82,19 @@ public class ChunkFromFileRequestBody extends FileRequestBody {
if (size == 0) size = -1;
long maxCount = Math.min(mOffset + mChunkSize, mChannel.size());
while (mChannel.position() < maxCount) {
Log_OC.d(TAG, "Sink buffer size: " + sink.buffer().size());
readCount = mChannel.read(mBuffer);
sink.write(mBuffer.array(), 0 ,readCount);
Log_OC.d(TAG, "Read " + readCount + " bytes from file channel to " + mBuffer.toString());
sink.buffer().write(mBuffer.array(), 0 ,readCount);
sink.flush();
Log_OC.d(TAG, "Write " + readCount + " bytes to sink buffer with size " + sink.buffer().size());
mBuffer.clear();
if (mTransferred < maxCount) { // condition to avoid accumulate progress for repeated chunks
mTransferred += readCount;
@ -84,9 +107,11 @@ public class ChunkFromFileRequestBody extends FileRequestBody {
}
}
sink.flush();
Log.d(TAG, "Chunk with size " + mChunkSize + " written in request body");
} catch (IOException io) {
} catch (Exception exception) {
Log.e(TAG, exception.toString());
// // any read problem will be handled as if the file is not there
// if (io instanceof FileNotFoundException) {
// throw io;

View File

@ -24,6 +24,10 @@
package com.owncloud.android.lib.common.network;
import android.util.Log;
import com.owncloud.android.lib.common.utils.Log_OC;
import java.io.File;
import java.util.Collection;
import java.util.HashSet;
@ -43,6 +47,8 @@ import okio.Source;
*/
public class FileRequestBody extends RequestBody implements ProgressiveDataTransferer {
private static final String TAG = FileRequestBody.class.getSimpleName();
protected File mFile;
private MediaType mContentType;
Set<OnDatatransferProgressListener> mDataTransferListeners = new HashSet<>();
@ -68,6 +74,7 @@ public class FileRequestBody extends RequestBody implements ProgressiveDataTrans
Iterator<OnDatatransferProgressListener> it;
try {
source = Okio.source(mFile);
long transferred = 0;
long read;
@ -82,6 +89,9 @@ public class FileRequestBody extends RequestBody implements ProgressiveDataTrans
}
}
Log.d(TAG, "File with name " + mFile.getName() + " and size " + mFile.length() +
" written in request body");
} catch (Exception e) {
e.printStackTrace();
}

View File

@ -106,11 +106,10 @@ public class ChunkedUploadRemoteFileOperation extends UploadRemoteFileOperation
if (mRequiredEtag != null && mRequiredEtag.length() > 0) {
mPutMethod.addRequestHeader(IF_MATCH_HEADER, "\"" + mRequiredEtag + "\"");
}
// mPutMethod.addRequestHeader(OC_CHUNKED_HEADER, OC_CHUNKED_HEADER);
// mPutMethod.addRequestHeader(OC_CHUNK_SIZE_HEADER, chunkSizeStr);
mPutMethod.addRequestHeader(OC_TOTAL_LENGTH_HEADER, totalLengthStr);
mPutMethod.addRequestHeader(OC_CHUNK_X_OC_MTIME_HEADER, mFileLastModifTimestamp);
// mPutMethod.addRequestHeader(OC_CHUNK_X_OC_MTIME_HEADER, mFileLastModifTimestamp);
// ((ChunkFromFileChannelRequestEntity) mEntity).setOffset(offset);
// mPutMethod.setRequestEntity(mEntity);

View File

@ -77,7 +77,7 @@ public class CreateRemoteFolderOperation extends RemoteOperation {
*/
@Override
protected RemoteOperationResult run(OwnCloudClient client) {
RemoteOperationResult result = null;
RemoteOperationResult result;
OwnCloudVersion version = client.getOwnCloudVersion();
boolean versionWithForbiddenChars =
(version != null && version.isVersionWithForbiddenCharacters());