1
0
mirror of https://github.com/owncloud/android-library.git synced 2025-06-08 00:16:09 +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 {
/***********************************************************************************************************
*************************************************** 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
*/

View File

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

View File

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

View File

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

View File

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

View File

@ -47,6 +47,9 @@ import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import okhttp3.MediaType;
import okhttp3.RequestBody;
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();
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 mRemotePath;
protected String mMimeType;
@ -107,7 +106,7 @@ public class UploadRemoteFileOperation extends RemoteOperation {
// );
mPutMethod = new PutMethod(
HttpUtils.stringUrlToHttpUrl(client.getWebdavUri() + WebdavUtils.encodePath(mRemotePath)));
HttpUtils.stringUrlToHttpUrl(client.getNewWebDavUri() + WebdavUtils.encodePath(mRemotePath)));
if (mCancellationRequested.get()) {
// 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 {
RemoteOperationResult result;
try {
File f = new File(mLocalPath);
// Headers
File fileToUpload = new File(mLocalPath);
// TODO
// synchronized (mDataTransferListeners) {
// ((ProgressiveDataTransferer)mEntity)
@ -147,12 +146,19 @@ public class UploadRemoteFileOperation extends RemoteOperation {
// }
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);

View File

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