1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-09 08:56:22 +00:00

Implement basic upload using the new wrapper

This commit is contained in:
davigonz 2018-06-13 14:03:41 +02:00
parent 524dc587db
commit e4e8a5a5e3
8 changed files with 62 additions and 40 deletions

View File

@ -29,6 +29,20 @@ package com.owncloud.android.lib.common.http;
*/ */
public class HttpConstants { public class HttpConstants {
/***********************************************************************************************************
*************************************************** HEADERS ***********************************************
***********************************************************************************************************/
public static final String IF_MATCH_HEADER = "If-Match";
public static final String IF_NONE_MATCH_HEADER = "If-None-Match";
public static final String CONTENT_TYPE_HEADER = "Content-Type";
public static final String OC_TOTAL_LENGTH_HEADER = "OC-Total-Length";
public static final String OC_X_OC_MTIME_HEADER = "X-OC-Mtime";
/***********************************************************************************************************
************************************************ STATUS CODES *********************************************
***********************************************************************************************************/
/** /**
* 1xx Informational * 1xx Informational
*/ */

View File

@ -33,6 +33,7 @@ import okhttp3.Headers;
import okhttp3.HttpUrl; import okhttp3.HttpUrl;
import okhttp3.OkHttpClient; import okhttp3.OkHttpClient;
import okhttp3.Request; import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response; import okhttp3.Response;
/** /**
@ -46,6 +47,7 @@ public abstract class HttpBaseMethod {
public abstract int execute() throws Exception; public abstract int execute() throws Exception;
protected OkHttpClient mOkHttpClient; protected OkHttpClient mOkHttpClient;
protected Request mRequest; protected Request mRequest;
protected RequestBody mRequestBody;
protected Response mResponse; protected Response mResponse;
protected HttpBaseMethod (HttpUrl httpUrl) { protected HttpBaseMethod (HttpUrl httpUrl) {
@ -56,19 +58,28 @@ public abstract class HttpBaseMethod {
} }
// Request // Request
public String getRequestHeader(String name) {
return mRequest.header(name);
}
public Headers getRequestHeaders() { public Headers getRequestHeaders() {
return mRequest.headers(); return mRequest.headers();
} }
public void addRequestHeader(String name, String value) { public void addRequestHeader(String name, String value) {
mRequest.newBuilder() mRequest = mRequest.newBuilder()
.addHeader(name, value) .addHeader(name, value)
.build(); .build();
} }
public void setRequestHeader(String name, String value){ public void setRequestHeader(String name, String value) {
mRequest.newBuilder() mRequest = mRequest.newBuilder()
.header(name, value); .header(name, value)
.build();
}
public void setRequestBody(RequestBody requestBody) {
mRequestBody = requestBody;
} }
// Response // Response

View File

@ -35,11 +35,8 @@ import okhttp3.RequestBody;
*/ */
public class PostMethod extends HttpMethod { public class PostMethod extends HttpMethod {
private RequestBody mRequestBody; public PostMethod(HttpUrl httpUrl){
public PostMethod(HttpUrl httpUrl, RequestBody requestBody){
super(httpUrl); super(httpUrl);
mRequestBody = requestBody;
} }
@Override @Override

View File

@ -31,11 +31,8 @@ import okhttp3.RequestBody;
public class PutMethod extends HttpMethod{ public class PutMethod extends HttpMethod{
private RequestBody mRequestBody; public PutMethod(HttpUrl httpUrl){
public PutMethod(HttpUrl httpUrl, RequestBody requestBody){
super(httpUrl); super(httpUrl);
mRequestBody = requestBody;
} }
@Override @Override

View File

@ -24,6 +24,8 @@
package com.owncloud.android.lib.common.http.methods.webdav; package com.owncloud.android.lib.common.http.methods.webdav;
import com.owncloud.android.lib.common.http.HttpConstants;
import java.io.IOException; import java.io.IOException;
import at.bitfire.dav4android.exception.DavException; import at.bitfire.dav4android.exception.DavException;
@ -38,13 +40,6 @@ import okhttp3.RequestBody;
*/ */
public class PutMethod extends DavMethod { public class PutMethod extends DavMethod {
private RequestBody mRequestBody;
private String mIfMatchETag;
private boolean mIfNoneMatch;
private String mContentType;
private String mOcTotalLength;
private String mOcXOcMtimeHeader;
public PutMethod(HttpUrl httpUrl) { public PutMethod(HttpUrl httpUrl) {
super(httpUrl); super(httpUrl);
}; };
@ -54,11 +49,13 @@ public class PutMethod extends DavMethod {
try { try {
mDavResource.put( mDavResource.put(
mRequestBody, mRequestBody,
mIfMatchETag, super.getRequestHeader(HttpConstants.IF_MATCH_HEADER),
mIfNoneMatch, // Save a file not known to exist, guaranteeing that another upload didn't happen
mContentType, // before, losing the data of the previous put
mOcTotalLength, true,
mOcXOcMtimeHeader super.getRequestHeader(HttpConstants.CONTENT_TYPE_HEADER),
super.getRequestHeader(HttpConstants.OC_TOTAL_LENGTH_HEADER),
super.getRequestHeader(HttpConstants.OC_X_OC_MTIME_HEADER)
); );
mRequest = mDavResource.getRequest(); mRequest = mDavResource.getRequest();

View File

@ -47,6 +47,9 @@ import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import static com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode.OK; import static com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode.OK;
/** /**
@ -61,10 +64,6 @@ public class UploadRemoteFileOperation extends RemoteOperation {
private static final String TAG = UploadRemoteFileOperation.class.getSimpleName(); private static final String TAG = UploadRemoteFileOperation.class.getSimpleName();
protected static final String OC_TOTAL_LENGTH_HEADER = "OC-Total-Length";
protected static final String OC_X_OC_MTIME_HEADER = "X-OC-Mtime";
protected static final String IF_MATCH_HEADER = "If-Match";
protected String mLocalPath; protected String mLocalPath;
protected String mRemotePath; protected String mRemotePath;
protected String mMimeType; protected String mMimeType;
@ -107,7 +106,7 @@ public class UploadRemoteFileOperation extends RemoteOperation {
// ); // );
mPutMethod = new PutMethod( mPutMethod = new PutMethod(
HttpUtils.stringUrlToHttpUrl(client.getWebdavUri() + WebdavUtils.encodePath(mRemotePath))); HttpUtils.stringUrlToHttpUrl(client.getNewWebDavUri() + WebdavUtils.encodePath(mRemotePath)));
if (mCancellationRequested.get()) { if (mCancellationRequested.get()) {
// the operation was cancelled before getting it's turn to be executed in the queue of uploads // the operation was cancelled before getting it's turn to be executed in the queue of uploads
@ -138,8 +137,8 @@ public class UploadRemoteFileOperation extends RemoteOperation {
protected RemoteOperationResult uploadFile(OwnCloudClient client) throws IOException { protected RemoteOperationResult uploadFile(OwnCloudClient client) throws IOException {
RemoteOperationResult result; RemoteOperationResult result;
try { try {
File f = new File(mLocalPath); // Headers
File fileToUpload = new File(mLocalPath);
// TODO // TODO
// synchronized (mDataTransferListeners) { // synchronized (mDataTransferListeners) {
// ((ProgressiveDataTransferer)mEntity) // ((ProgressiveDataTransferer)mEntity)
@ -147,12 +146,19 @@ public class UploadRemoteFileOperation extends RemoteOperation {
// } // }
if (mRequiredEtag != null && mRequiredEtag.length() > 0) { if (mRequiredEtag != null && mRequiredEtag.length() > 0) {
mPutMethod.addRequestHeader(IF_MATCH_HEADER, "\"" + mRequiredEtag + "\""); mPutMethod.addRequestHeader(HttpConstants.IF_MATCH_HEADER, "\"" + mRequiredEtag + "\"");
} }
mPutMethod.addRequestHeader(OC_TOTAL_LENGTH_HEADER, String.valueOf(f.length())); mPutMethod.addRequestHeader(HttpConstants.OC_TOTAL_LENGTH_HEADER, String.valueOf(fileToUpload.length()));
mPutMethod.addRequestHeader(OC_X_OC_MTIME_HEADER, mFileLastModifTimestamp); mPutMethod.addRequestHeader(HttpConstants.OC_X_OC_MTIME_HEADER, mFileLastModifTimestamp);
// Request body
MediaType mediaType = MediaType.parse(mMimeType);
mPutMethod.setRequestBody(
RequestBody.create(mediaType, fileToUpload)
);
int status = client.executeHttpMethod(mPutMethod); int status = client.executeHttpMethod(mPutMethod);

View File

@ -226,17 +226,16 @@ public class CreateRemoteShareOperation extends RemoteOperation {
formBodyBuilder.add(PARAM_PERMISSIONS, Integer.toString(mPermissions)); formBodyBuilder.add(PARAM_PERMISSIONS, Integer.toString(mPermissions));
} }
FormBody formBody = formBodyBuilder.build();
Uri requestUri = client.getBaseUri(); Uri requestUri = client.getBaseUri();
Uri.Builder uriBuilder = requestUri.buildUpon(); Uri.Builder uriBuilder = requestUri.buildUpon();
uriBuilder.appendEncodedPath(ShareUtils.SHARING_API_PATH); uriBuilder.appendEncodedPath(ShareUtils.SHARING_API_PATH);
PostMethod postMethod = new PostMethod( PostMethod postMethod = new PostMethod(
HttpUtils.stringUrlToHttpUrl(uriBuilder.build().toString()), HttpUtils.stringUrlToHttpUrl(uriBuilder.build().toString())
formBody
); );
postMethod.setRequestBody(formBodyBuilder.build());
postMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); postMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
postMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); postMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE);

View File

@ -206,10 +206,11 @@ public class UpdateRemoteShareOperation extends RemoteOperation {
uriBuilder.appendEncodedPath(Long.toString(mRemoteId)); uriBuilder.appendEncodedPath(Long.toString(mRemoteId));
PutMethod putMethod = new PutMethod( PutMethod putMethod = new PutMethod(
HttpUtils.stringUrlToHttpUrl(uriBuilder.build().toString()), HttpUtils.stringUrlToHttpUrl(uriBuilder.build().toString())
formBody
); );
putMethod.setRequestBody(formBodyBuilder.build());
putMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); putMethod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
putMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE); putMethod.addRequestHeader(OCS_API_HEADER, OCS_API_HEADER_VALUE);