Yes this is very much possible. You will only have to deal with how would like to send the URL back after creating the pre signed URL. Maybe as XML or as plain text..
I would recommend using the jets3t library to create the URL. You could call this API:
org.jets3t.service.S3Service.createSignedPutUrl(String, String, Map, Date, boolean)
You could also an IAM policy instead. But your way is easier.
Edit: Added more information..
That's the beauty of it, when you are using the jets3t library you dont need to any of that.
Just call the method :
S3Service s3Service = new RestS3Service(awsCredentials);
// Create a signed HTTP PUT URL valid for 5 minutes.
String putUrl = s3Service.createSignedPutUrl(bucket.getName(), object.getKey(),
object.getMetadataMap(), expiryDate, false);
And use the URL to upload your image like below:
SignedUrlHandler signedUrlHandler = new RestS3Service(null);
S3Object object = new S3Object(bucket,<your file object goes here>);
S3Object putObject = signedUrlHandler.putObjectWithSignedUrl(putUrl, object);
Edit for signedGetURL():
Only the ones with ProviderCredential being passed in are deprecated.. This one is not :
http://jets3t.s3.amazonaws.com/api/org/jets3t/service/S3Service.html#createSignedGetUrl(java.lang.String, java.lang.String, java.util.Date)
You wouldnt need to pass the credentials into this method anyway. Its only the s3service object that needs the credentials.. like this...
S3Service s3service=new RestS3Service(credentials); // pass your credentials here
String createSignedGetUrl = s3service.createSignedGetUrl(storageObject.getBucketName(),
storageObject.getKey(),new DateTime().plusMinutes(5).toDate());