Last modified by Pascal Robert on 2011/02/22 10:35

From version 2.1
edited by smmccraw
on 2007/07/08 09:45
Change comment: There is no comment for this version
To version 3.1
edited by Quinton Dolan
on 2007/07/12 20:34
Change comment: There is no comment for this version

Summary

Details

Page properties
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.smmccraw
1 +XWiki.qdolan
Content
... ... @@ -135,53 +135,49 @@
135 135  
136 136  Generally, I create a direct action method for dispensing the images. Something like this in your DirectAction (except that you might want to add validation if you don't want just anyone getting to your images by hacking the URL):
137 137  
138 -{{panel}}
138 +{{code}}
139 139  
140 - public WOActionResults imageAction()
141 - {
142 - // PictureTest is an EOEntity with a BLOB containing the image data
143 - PictureTest pt = getPictureTestEO();
144 - return jpegResponseWithData(pt.image());
145 - }
146 -
147 - private PictureTest getPictureTestEO()
148 - {
149 - // Yes - you can get the session in a direct action
150 - // you just need to be prepared to deal with one not existing
151 - // whether you return an image if no session exists depends on
152 - // on your own application needs.
153 - WOSession theSession = existingSession();
154 - EOEditingContext ec = (theSession == null) ? new EOEditingContext() : theSession.defaultEditingContext();
155 - String picid = (String)request().formValueForKey("picid");
156 - return (PictureTest)EOUtilities.objectMatchingKeyAndValue(ec, "PictureTest","id", new Integer(picid));
157 - }
158 -
159 - private WOResponse jpegResponseWithData(NSData theData)
160 - {
161 - // This method returns the data so that the browser
162 - // recognizes the image type. In this particular application
163 - // I've just hardcoded a mime type of JPEG because I only
164 - // use JPEG images, but a better way would be to store the mime-type
165 - // that corresponds to the image data in the BLOB as a separate
166 - // field. I might revise this sample later on to show that.
167 - WOResponse response = WOApplication.application().createResponseInContext(context());
168 - response.appendHeader("image/jpeg", "Content-Type");
169 - response.appendContentData(theData);
170 - return response;
171 - }
140 +public WOActionResults imageAction() {
141 + // PictureTest is an EOEntity with a BLOB containing the image data
142 + PictureTest pt = getPictureTestEO();
143 + return jpegResponseWithData(pt.image());
144 +}
172 172  
173 -{{/panel}}
146 +private PictureTest getPictureTestEO() {
147 + // Yes - you can get the session in a direct action
148 + // you just need to be prepared to deal with one not existing
149 + // whether you return an image if no session exists depends on
150 + // on your own application needs.
151 + WOSession theSession = existingSession();
152 + EOEditingContext ec = (theSession == null) ? new EOEditingContext() : theSession.defaultEditingContext();
153 + String picid = (String)request().formValueForKey("picid");
154 + return (PictureTest)EOUtilities.objectMatchingKeyAndValue(ec, "PictureTest","id", new Integer(picid));
155 +}
174 174  
157 +private WOResponse jpegResponseWithData(NSData theData) {
158 + // This method returns the data so that the browser
159 + // recognizes the image type. In this particular application
160 + // I've just hardcoded a mime type of JPEG because I only
161 + // use JPEG images, but a better way would be to store the mime-type
162 + // that corresponds to the image data in the BLOB as a separate
163 + // field. I might revise this sample later on to show that.
164 + WOResponse response = WOApplication.application().createResponseInContext(context());
165 + response.appendHeader("image/jpeg", "Content-Type");
166 + response.appendContentData(theData);
167 + return response;
168 +}
169 +
170 +{{/code}}
171 +
175 175  Then, in your WOComponent, you create a virtual accessor like this:
176 176  
177 -{{panel}}
174 +{{code}}
178 178  
179 - public String imageURL()
180 - {
181 - return context().directActionURLForActionNamed("icon", null) + "?picid=" + pictureItem.id();
182 - }
176 +public String imageURL() {
177 + return context().directActionURLForActionNamed("icon", null) + "?picid=" + pictureItem.id();
178 +}
183 183  
184 -{{/panel}}
180 +{{/code}}
185 185  
186 186  in this case, pictureItem is a PictureItem EOEntity instance that I use in a WORepetition - I'm just pulling the id number from the currently selected picture.
187 187