oh, now you tell me!
HA!
Well, I can see it is a smattering of logic with raw-wo'ish style code, but it
did just 'function' for me- so at least I have something to work off from.
from that, I add the attachment to the eo I want and save the context.
I would not mind cleaning it up, if there's a better implementation somewhere
about.
On May 3, 2011, at 1:21 PM, Mike Schrag wrote:
> btw, most of this code is duplicated (and probably less optimally impl'd) in
> ERXFileUtilities methods … so .. you know .. don't copy this.
>
> ms
>
> On May 3, 2011, at 12:39 PM, Pascal Robert wrote:
>
>>
>> Le 2011-05-03 à 12:35, Mike Schrag a écrit :
>>
>>> if you can guarantee small data, and you have some level of confidence that
>>> your service can't be abused, file uploading into an NSData is maybe OK …
>>> otherwise you should be using the multipart request file upload API's in
>>> WO. You'll have to do a little plumbing yourself.
>>
>> As (coming from one of Apple example apps):
>>
>> WOMultipartIterator mpI = request().multipartIterator();
>> if (mpI == null) {
>> throw new IllegalStateException("Could not get the
>> WOMultipartIterator. Verify that the WOForm's 'enctype' binding is set to
>> 'multipart/form-data'");
>> }
>>
>> WOMultipartIterator.WOFormData wfd = null;
>> while (true) {
>> wfd = mpI.nextFormData();
>> if (wfd != null) break;
>> if
>> ("thefile".equals(wfd.contentDispositionHeaders().valueForKey("name")))
>> break;
>> }
>>
>> if ( (wfd != null) && (wfd.isFileUpload()) ) {
>> // Get the filename information from the request
>> NSDictionary contentDispHeaders = wfd.contentDispositionHeaders();
>> String aFileName = (String) contentDispHeaders.valueForKey("filename");
>>
>> // Get just the name for the uploaded file from aFileName.
>> String fileName = null;
>> fileName = NSPathUtilities.lastPathComponent( aFileName );
>> String outputFilePath = new String("/tmp" + File.separator + fileName
>> );
>>
>> // Write the file out to the location
>> if ((fileName!=null) && (fileName.length()>0)) {
>> try {
>> InputStream wfdIs = wfd.formDataInputStream();
>> FileOutputStream fileOutputStream = new
>> FileOutputStream(outputFilePath);
>>
>> // This will use a 1MB buffer to transfer chunks of data from the
>> Client to the Disk
>> int read = 0;
>> byte[] buffer = new byte[1024 * 1024]; // 1MB buffer
>> do {
>> read = wfdIs.read(buffer);
>> if (read != -1) {
>> fileOutputStream.write(buffer, 0, read);
>> } else {
>> break;
>> }
>> } while (read != -1);
>>
>> fileOutputStream.flush();
>> fileOutputStream.close();
>>
>> } catch (IOException e) {
>> NSLog.err.appendln("Error writing file: " + e);
>> }
>> } else {
>> // fileName == null or length 0
>> NSLog.out.appendln( "No File Uploaded" );
>> }
>> } else {
>> // wfd == null means that there was no file uploaded.
>> NSLog.out.appendln( "No File Uploaded" );
>> }
>>
>>> ms
>>>
>>> On May 3, 2011, at 12:31 PM, Jesse Tayler wrote:
>>>
>>>> Mike -
>>>>
>>>> Oh, thanks, and I probably don't want to, but I didn't see the ERRestRoute
>>>> I kinda expected?
>>>>
>>>> I just put image data (NSData) into the form on my client app, and figured
>>>> I'd get it out of the form on the server.
>>>>
>>>> What's my best rout to implement this type of file upload, given that my
>>>> model and eo's work ok for the web client already.
>>>>
>>>> I'm just going from iphone to WO, as I'm sure many of us are.
>>>>
>>>>
>>>> On May 3, 2011, at 12:22 PM, Mike Schrag wrote:
>>>>
>>>>> write it to a file … you probably don't ever want file uploads into
>>>>> NSData's, btw.
>>>>>
>>>>> ms
>>>>>
>>>>> On May 3, 2011, at 12:17 PM, Jesse Tayler wrote:
>>>>>
>>>>>> Thanks Henrique,
>>>>>>
>>>>>> Ah, a processor makes sense. I use "S3" and I'm just getting Form-values
>>>>>> for the filename and nsdata.
>>>>>>
>>>>>> What I can see is an API with a java.io.File, and not the NSData
>>>>>> "posterData" which I got from the form values?
>>>>>>
>>>>>> NSData posterData =
>>>>>> (NSData)formValuesDictionary.valueForKeyPath("poster");
>>>>>> ERAttachment attachment =
>>>>>> ERAttachmentProcessor.processorForType("s3").process(editingContext(),
>>>>>> posterData, (String)dic.valueForKeyPath("filename"));
>>>>>>
>>>>>> Am I following you correctly in that I should use this S3 processor API
>>>>>> ? I guess I'd have to write the NSData to a temp file?
>>>>>>
>>>>>> Or is there an API I'm confusing which would handle the NSData I get
>>>>>> from the form?
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On May 3, 2011, at 7:50 AM, Henrique Prange wrote:
>>>>>>
>>>>>>> Hi Jesse,
>>>>>>>
>>>>>>> ERAttachment is an abstract class. You can't instantiate it using the
>>>>>>> createERAttachment method.
>>>>>>>
>>>>>>> You should create the attachment using the ERAttachmentProcessor
>>>>>>> instead:
>>>>>>>
>>>>>>> ERAttachment attachment =
>>>>>>> ERAttachmentProcessor.processorForType(storageType).process(editingContext,
>>>>>>> uploadedFile, originalFileName, mimeType, configurationName, ownerID);
>>>>>>>
>>>>>>> Cheers,
>>>>>>>
>>>>>>> Henrique
>>>>>>>
>>>>>>> On 02/05/2011, at 15:30, Jesse Tayler wrote:
>>>>>>>
>>>>>>>> I'm trying to create an ERAttachment via ERRest,
>>>>>>>>
>>>>>>>> I didn't see an ERRestRoute for uploading file attachments but maybe
>>>>>>>> that's what I'm missing?
>>>>>>>>
>>>>>>>> I get a creation error while trying to create ERAttachment, and I
>>>>>>>> realize I likely should be creating the ERAttachmentData object first,
>>>>>>>> or more likely, find the ERRestRoute that's best for uploading a new
>>>>>>>> file attachment?
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> NSData posterData =
>>>>>>>> (NSData)dic.valueForKeyPath("poster");
>>>>>>>> ERAttachment attachment =
>>>>>>>> ERAttachment.createERAttachment(editingContext(), true, new
>>>>>>>> NSTimestamp(), (String)dic.valueForKeyPath("mimetype"),
>>>>>>>> (String)dic.valueForKeyPath("filename"), false, sizeInteger,
>>>>>>>> webPathString));
>>>>>>>> user().setPoster(attachment);
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>>>> Webobjects-dev mailing list ([email protected])
>>>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>>> http://lists.apple.com/mailman/options/webobjects-dev/hprange%40gmail.com
>>>>>>>>
>>>>>>>> This email sent to [email protected]
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>>> Webobjects-dev mailing list ([email protected])
>>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>> http://lists.apple.com/mailman/options/webobjects-dev/jtayler%40oeinc.com
>>>>>>>
>>>>>>> This email sent to [email protected]
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>> Webobjects-dev mailing list ([email protected])
>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>> http://lists.apple.com/mailman/options/webobjects-dev/mschrag%40pobox.com
>>>>>>
>>>>>> This email sent to [email protected]
>>>>>
>>>>>
>>>>
>>>
>>> _______________________________________________
>>> Do not post admin requests to the list. They will be ignored.
>>> Webobjects-dev mailing list ([email protected])
>>> Help/Unsubscribe/Update your Subscription:
>>> http://lists.apple.com/mailman/options/webobjects-dev/probert%40macti.ca
>>>
>>> This email sent to [email protected]
>>
>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com
This email sent to [email protected]