From: David A. Velasco Date: Mon, 24 Sep 2012 12:10:31 +0000 (+0200) Subject: Added big file chunking for uplaods X-Git-Tag: oc-android-1.4.3~176 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/b00957b5fa28651b588292b9696648af6dc52636 Added big file chunking for uplaods --- diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 0ad36496..75a7b677 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -17,8 +17,8 @@ along with this program. If not, see . --> + android:versionCode="103011" + android:versionName="1.3.11" xmlns:android="http://schemas.android.com/apk/res/android"> diff --git a/src/com/owncloud/android/files/services/FileUploader.java b/src/com/owncloud/android/files/services/FileUploader.java index 6cf7a5cf..10916917 100644 --- a/src/com/owncloud/android/files/services/FileUploader.java +++ b/src/com/owncloud/android/files/services/FileUploader.java @@ -103,8 +103,8 @@ public class FileUploader extends Service implements OnDatatransferProgressListe * @return 'True' if the ownCloud server with version supports chunked uploads. */ private static boolean chunkedUploadIsSupported(OwnCloudVersion version) { - //return (version != null && version.compareTo(OwnCloudVersion.owncloud_v4_5) >= 0); // TODO uncomment when feature is full in server - return false; + return (version != null && version.compareTo(OwnCloudVersion.owncloud_v4_5) >= 0); // TODO uncomment when feature is full in server + //return false; } diff --git a/src/com/owncloud/android/operations/ChunkedUploadFileOperation.java b/src/com/owncloud/android/operations/ChunkedUploadFileOperation.java index 0716a91f..97d3eba6 100644 --- a/src/com/owncloud/android/operations/ChunkedUploadFileOperation.java +++ b/src/com/owncloud/android/operations/ChunkedUploadFileOperation.java @@ -28,6 +28,8 @@ import java.util.Random; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.methods.PutMethod; +import android.util.Log; + import eu.alefzero.webdav.ChunkFromFileChannelRequestEntity; import eu.alefzero.webdav.OnDatatransferProgressListener; import eu.alefzero.webdav.WebdavClient; @@ -37,6 +39,7 @@ public class ChunkedUploadFileOperation extends UploadFileOperation { private static final long CHUNK_SIZE = 102400; private static final String OC_CHUNKED_HEADER = "OC-Chunked"; + private static final String TAG = ChunkedUploadFileOperation.class.getSimpleName(); public ChunkedUploadFileOperation( String localPath, String remotePath, @@ -62,15 +65,16 @@ public class ChunkedUploadFileOperation extends UploadFileOperation { ChunkFromFileChannelRequestEntity entity = new ChunkFromFileChannelRequestEntity(channel, getMimeType(), CHUNK_SIZE); entity.setOnDatatransferProgressListener(getDataTransferListener()); long offset = 0; - String uriPrefix = client.getBaseUri() + WebdavUtils.encodePath(getRemotePath()) + "-chunking-" + Math.abs((new Random()).nextInt()) + "-" ; + String uriPrefix = client.getBaseUri() + WebdavUtils.encodePath(getRemotePath()) + "-chunking-" + Math.abs((new Random()).nextInt(9000)+1000) + "-" ; long chunkCount = (long) Math.ceil((double)file.length() / CHUNK_SIZE); for (int chunkIndex = 0; chunkIndex < chunkCount ; chunkIndex++, offset += CHUNK_SIZE) { - put = new PutMethod(uriPrefix + chunkIndex + "-" + chunkCount); + put = new PutMethod(uriPrefix + chunkCount + "-" + chunkIndex); put.addRequestHeader(OC_CHUNKED_HEADER, OC_CHUNKED_HEADER); entity.setOffset(offset); put.setRequestEntity(entity); status = client.executeMethod(put); client.exhaustResponse(put.getResponseBodyAsStream()); + Log.d(TAG, "Upload of " + getLocalPath() + " to " + getRemotePath() + ", chunk index " + chunkIndex + ", count " + chunkCount + ", HTTP result status " + status); if (!isSuccess(status)) break; } diff --git a/src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java b/src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java index bcba3541..c3c9a69c 100644 --- a/src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java +++ b/src/eu/alefzero/webdav/ChunkFromFileChannelRequestEntity.java @@ -89,9 +89,8 @@ public class ChunkFromFileChannelRequestEntity implements RequestEntity { int readCount = 0; try { - //while ((i = instream.read(tmp)) >= 0) { mChannel.position(mOffset); - while (mChannel.position() < mOffset + mSize) { + while (mChannel.position() < mOffset + mSize && mChannel.position() < mChannel.size()) { readCount = mChannel.read(mBuffer); out.write(mBuffer.array(), 0, readCount); mBuffer.clear();