I'm having trouble uploading photos from my Android app to GCS. I can upload text files, but not photos. I tried various mime types, as well as various Base64 encoding methods (decodeBase64, encodeBase64URLSafeString, etc.)
I feel very close.
This is the error message I get:
com.google.appengine.repackaged.org.codehaus.jackson.JsonParseException: Invalid character '_' (code 0x5f) in base64 content in [Source: N / A; row: -1, column: -1]
I looked at the encoded string and there was no _ _ there.
Android Code:
Activity:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
switch (requestCode)
{
case 0:
{
try
{
InputStream is = getContentResolver().openInputStream(data.getData());
tvMessage.setText("Done!");
byte[] b = getBytes(is);
gaeTask task = new gaeTask();
PhotoObject p = new PhotoObject();
p.encodeBytes(b);
p.setName("picturejpg.jpg");
task.execute(p);
}
}
AsnycTask:
protected String doInBackground(PhotoObject... params)
{
String responseMessage = "";
try
{
PhotoObjectEndpoint builder = new PhotoObjectEndpoint(AndroidHttp.newCompatibleTransport(), new JacksonFactory(), new HttpRequestInitializer()
{
@Override
public void initialize(HttpRequest arg0) throws IOException
{
}
});
PhotoObject p = params[0];
builder.insertPhotoObject(p).execute();
responseMessage = p.getName() + " was successfully deployed.";
}
GAE / GCS Code:
GAE – PhotoObject:
@Entity
public class PhotoObject
{
public PhotoObject(){}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Key key;
public Key getKey()
{
return key;
}
public void setKey(Key key)
{
this.key = key;
}
private String mBytes;
public byte[] getBytes()
{
return decodeBytes();
}
public void setBytes(byte[] mBytes)
{
this.mBytes = encodeBytes(mBytes);
}
private String name;
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
private FileType type;
public FileType getType()
{
return type;
}
public void setType(FileType type)
{
this.type = type;
}
public byte[] decodeBytes()
{
return com.google.api.client.util.Base64.decodeBase64(mBytes);
}
public String encodeBytes(byte[] bytes)
{
this.mBytes = com.google.api.client.util.Base64.encodeBase64String(bytes);
return this.mBytes;
}
}
GAE - insertPhotoObject:
try
{
final GcsService gcsService = GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());
GcsFilename name = new GcsFilename("testbucket123", fileName);
GcsFileOptions.Builder optionsBuilder = new GcsFileOptions.Builder();
optionsBuilder.mimeType("image/jpg");
GcsOutputChannel outputChannel = gcsService.createOrReplace(name, optionsBuilder.build());
ObjectOutputStream out = new ObjectOutputStream(Channels.newOutputStream(outputChannel));
out.write(bytes);
out.close();
}
Thanks in advance.