Skip to content
Snippets Groups Projects
Commit e1ab26ac authored by John Carlson's avatar John Carlson
Browse files

Correct the way that we upload files

parent 85d6770a
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -2,10 +2,8 @@ package com.commit451.gitlab.activity;
 
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.design.widget.Snackbar;
import android.support.v4.widget.SwipeRefreshLayout;
Loading
Loading
@@ -29,6 +27,7 @@ import com.commit451.gitlab.model.api.Issue;
import com.commit451.gitlab.model.api.Note;
import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.navigation.Navigator;
import com.commit451.gitlab.util.FileUtil;
import com.commit451.gitlab.util.IntentUtil;
import com.commit451.gitlab.util.PaginationUtil;
import com.commit451.gitlab.view.SendMessageView;
Loading
Loading
@@ -37,15 +36,12 @@ import com.commit451.teleprinter.Teleprinter;
import org.greenrobot.eventbus.Subscribe;
import org.parceler.Parcels;
 
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
 
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okhttp3.MultipartBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
Loading
Loading
@@ -327,7 +323,7 @@ public class IssueActivity extends BaseActivity {
 
@Override
public void onAttachmentClicked() {
Navigator.navigateToAttach(IssueActivity.this);
Navigator.navigateToChoosePhoto(IssueActivity.this, REQUEST_IMAGE);
}
});
 
Loading
Loading
@@ -370,15 +366,8 @@ public class IssueActivity extends BaseActivity {
//Not checking result code because apps are dumb and don't use it
Uri selectedImage = data.getData();
if (selectedImage != null) {
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
RequestBody requestBody = RequestBody.create(MediaType.parse("image/jpeg"), stream.toByteArray());
App.instance().getGitLab().uploadFile(mProject.getId(), requestBody).enqueue(mUploadImageCallback);
} catch (IOException e) {
Timber.e(e, null);
}
MultipartBody.Part part = FileUtil.toPart(IssueActivity.this, selectedImage);
App.instance().getGitLab().uploadFile(mProject.getId(), part).enqueue(mUploadImageCallback);
}
break;
}
Loading
Loading
Loading
Loading
@@ -30,15 +30,16 @@ import com.commit451.gitlab.model.api.UserLogin;
 
import java.util.List;
 
import okhttp3.RequestBody;
import okhttp3.MultipartBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.DELETE;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Part;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.Url;
Loading
Loading
@@ -175,10 +176,10 @@ public interface GitLab {
@DELETE(API_VERSION + "/projects/{id}/star")
Call<Project> unstarProject(@Path("id") long projectId);
 
//@Multipart
@Multipart
@POST(API_VERSION + "/projects/{id}/uploads")
Call<FileUploadResponse> uploadFile(@Path("id") long projectId,
@Body RequestBody file);
@Part MultipartBody.Part file);
 
/* --- MILESTONES --- */
 
Loading
Loading
package com.commit451.gitlab.util;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.net.Uri;
import android.provider.MediaStore;
import android.provider.OpenableColumns;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import timber.log.Timber;
/**
* Utility methods for uploading files
*/
public class FileUtil {
public static MultipartBody.Part toPart(Context context, Uri imageUri) {
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), imageUri);
String fileName = getFileName(context, imageUri);
return toPart(bitmap, fileName);
} catch (IOException e) {
//this won't happen, maybe
Timber.e(e);
}
return null;
}
public static MultipartBody.Part toPart(Bitmap bitmap, String name) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), stream.toByteArray());
return MultipartBody.Part.createFormData("file", name, requestBody);
}
public static String getFileName(Context context, Uri imageUri) {
Cursor returnCursor =
context.getContentResolver().query(imageUri, null, null, null, null);
if (returnCursor == null) {
//This should probably just return null, but oh well
return "file";
}
int nameIndex = returnCursor.getColumnIndex(MediaStore.Audio.Media.TITLE);
if (nameIndex == -1) {
nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
}
returnCursor.moveToFirst();
String name = returnCursor.getString(nameIndex);
if (!returnCursor.isClosed()) {
returnCursor.close();
}
return name;
}
}
Loading
Loading
@@ -14,7 +14,7 @@
android:layout_gravity="center_vertical"
android:padding="8dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:visibility="gone"
android:visibility="visible"
android:contentDescription="@null"/>
 
<EditText
Loading
Loading
Loading
Loading
@@ -14,6 +14,7 @@ import com.commit451.gitlab.model.api.Project;
import com.commit451.gitlab.model.api.RepositoryCommit;
import com.commit451.gitlab.model.api.RepositoryTreeObject;
import com.commit451.gitlab.model.api.UserFull;
import com.commit451.gitlab.util.FileUtil;
 
import org.junit.BeforeClass;
import org.junit.Test;
Loading
Loading
@@ -23,11 +24,9 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowLog;
 
import java.io.ByteArrayOutputStream;
import java.util.List;
 
import okhttp3.MediaType;
import okhttp3.RequestBody;
import okhttp3.MultipartBody;
import retrofit2.Response;
 
import static org.junit.Assert.assertNotNull;
Loading
Loading
@@ -131,18 +130,15 @@ public class ApiTests {
assertNotNull(userFullResponse.body());
}
 
//@Test
// @Test
public void uploadFile() throws Exception {
Bitmap bitmap = BitmapFactory.decodeResource(RuntimeEnvironment.application.getResources(), R.drawable.ic_fork);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
RequestBody requestBody = RequestBody.create(MediaType.parse("image/png"), stream.toByteArray());
MultipartBody.Part part = FileUtil.toPart(bitmap, "fork.png");
 
Response<FileUploadResponse> userFullResponse = gitLab
.uploadFile(sFakeProject.getId(), requestBody)
.execute();
assertTrue(userFullResponse.isSuccessful());
assertNotNull(userFullResponse.body());
Response<FileUploadResponse> uploadResponseResponse =
gitLab.uploadFile(sFakeProject.getId(), part).execute();
assertTrue(uploadResponseResponse.isSuccessful());
assertNotNull(uploadResponseResponse.body());
}
 
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment