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]

Reply via email to