Ein kleines Beispiel zeigt wie man Bilder hochladen kann und dann im Callback den BlobKey erhält.
Im view kann mittels
<form action="${controllers.GAEImageUploader.getUploadFormAction()}"
enctype="multipart/form-data" method="post">
<input type="file" name="newblob">
<input type="submit" value="upload">
</form>
Ein Formular erzeugt werden.
Den Controller findet ihr hier:
public class GAEImageUploader extends Controller {
private static HttpServletResponse getHttpServletResponse() {
return (HttpServletResponse)request.args.get(ServletWrapper.SERVLET_RES);
}
private static HttpServletRequest getHttpServletRequest() {
return (HttpServletRequest)request.args.get(ServletWrapper.SERVLET_REQ);
}
public static String getUploadFormAction() {
BlobstoreService blobService = BlobstoreServiceFactory.getBlobstoreService();
// if needed add some variables here into the map.
// Later you will get them back when callback is called
Map<String, Object> paramMap = new HashMap<String, Object>();
String callbackUrl = Router.reverse("GAEImageUploader.onuploaded", paramMap).url;
return blobService.createUploadUrl(callbackUrl);
}
public static void serve(String blobKeyString) throws IOException
{
BlobstoreService blobService = BlobstoreServiceFactory.getBlobstoreService();
blobService.serve(new BlobKey(blobKeyString), getHttpServletResponse());
}
public static void onuploaded() throws IOException {
Logger.info("onuploaded complete");
BlobstoreService blobService = BlobstoreServiceFactory.getBlobstoreService();
Map<String, BlobKey> blobs = blobService.getUploadedBlobs(getHttpServletRequest());
Logger.info("uploaded blobs map size :" + blobs.size());
Iterator<BlobKey> iterator = blobs.values().iterator();
// Blob key exists so serve directly
if (iterator.hasNext()) {
BlobKey blobKey = iterator.next();
serve(blobKey.getKeyString());
return;
} else {
// Otherwise render default
render();
}
}
}
no comments