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:
parent
b99723205b
commit
0b9a79491f
@ -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;
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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());
|
||||
|
Loading…
x
Reference in New Issue
Block a user