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

Include upload headers in interceptor and finish upload file operation

This commit is contained in:
davigonz 2018-05-24 11:28:04 +02:00
parent 75ce8e186f
commit 63c917c979
3 changed files with 49 additions and 19 deletions

@ -1 +1 @@
Subproject commit 6a5835a960c4a3d4361a70ef72914b9fa214363d Subproject commit d0a09ad1ea87044d7e50cc870fc798562d1f0d38

View File

@ -37,10 +37,11 @@ public abstract class RemoteOperation {
return mClient.newBuilder() return mClient.newBuilder()
.addInterceptor(chain -> .addInterceptor(chain ->
chain.proceed( chain.proceed(
addRequestCredentials( addRequestCredentials(chain.request())
chain.request())
.addHeader(USER_AGENT_HEADER, mContext.getUserAgent()) .addHeader(USER_AGENT_HEADER, mContext.getUserAgent())
.build())) .build()
)
)
.followRedirects(false) .followRedirects(false)
.build(); .build();
} }

View File

@ -30,23 +30,33 @@ import com.owncloud.android.lib.refactor.RemoteOperationResult;
import java.io.File; import java.io.File;
import at.bitfire.dav4android.DavOCResource; import at.bitfire.dav4android.DavResource;
import okhttp3.MediaType; import okhttp3.MediaType;
import okhttp3.Request;
import okhttp3.RequestBody; import okhttp3.RequestBody;
/**
* @author David González Verdugo
*/
public class UploadRemoteFileOperation extends RemoteOperation { public class UploadRemoteFileOperation extends RemoteOperation {
private String mLocalPath; private static final String CONTENT_TYPE_HEADER = "Content-Type";
private static final String OC_TOTAL_LENGTH_HEADER = "OC-Total-Length";
private static final String OC_X_OC_MTIME_HEADER = "X-OC-Mtime";
private static final String IF_MATCH_HEADER = "If-Match";
private File mFileToUpload;
private String mRemotePath; private String mRemotePath;
private String mMimeType; private String mMimeType;
private String mFileLastModifTimestamp; private String mFileLastModifTimestamp;
public UploadRemoteFileOperation(OCContext context, String localPath, String remotePath, String mimetype, public UploadRemoteFileOperation(OCContext context, String localPath, String remotePath, String mimetype,
String fileLastModifTimestamp) { String fileLastModifTimestamp) {
super(context); super(context);
mLocalPath = localPath; mFileToUpload = new File(localPath);
mRemotePath = remotePath; mRemotePath = remotePath.replaceAll("^/+", ""); //Delete leading slashes
mMimeType = mimetype; mMimeType = mimetype;
mFileLastModifTimestamp = fileLastModifTimestamp; mFileLastModifTimestamp = fileLastModifTimestamp;
} }
@ -56,21 +66,25 @@ public class UploadRemoteFileOperation extends RemoteOperation {
try { try {
File fileToUpload = new File(mLocalPath);
MediaType mediaType = MediaType.parse(mMimeType); MediaType mediaType = MediaType.parse(mMimeType);
RequestBody requestBody = RequestBody.create(mediaType, fileToUpload); RequestBody requestBody = RequestBody.create(mediaType, mFileToUpload);
DavOCResource davOCResource = new DavOCResource( DavResource davResource = new DavResource(
getClient(), getClient()
getWebDavHttpUrl(mRemotePath), .newBuilder()
null); .addInterceptor(chain ->
chain.proceed(
addUploadHeaders(chain.request())
.build()
)
)
.followRedirects(false)
.build(),
getWebDavHttpUrl(mRemotePath));
davOCResource.put(requestBody, davResource.put(requestBody,
null, null,
false, false);
"multipart/form-data",
String.valueOf(fileToUpload.length()),
mFileLastModifTimestamp);
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@ -78,4 +92,19 @@ public class UploadRemoteFileOperation extends RemoteOperation {
return null; return null;
} }
/**
* Add headers needed to upload a file
* @param request request in which include the headers
* @return request with upload headers
*/
private Request.Builder addUploadHeaders (Request request) {
Request.Builder builder = request.newBuilder();
builder.addHeader(CONTENT_TYPE_HEADER, "multipart/form-data");
builder.addHeader(OC_TOTAL_LENGTH_HEADER, String.valueOf(mFileToUpload.length()));
builder.addHeader(OC_X_OC_MTIME_HEADER, mFileLastModifTimestamp);
return builder;
}
} }