Happy to help. Ikai's right, the best way would be if you can subclass
MediaFileSource. Here's a quick and dirty attempt. Didn't try to compile it
or anything like that. Just threw it together. The only question is whether
or not getMediaFile is called by anything else within the API. I've coded
this one to through an UnsupportedException if it is. Not sure what to do if
the API uses that method call. Hopefully it doesn't. If it does, then I
guess you'd have to subclass java.io.File and fake a File object.
public class Memory*MediaFileSource* extends MediaFileSource {
private byte[] mediaBuf;
public *MediaFileSource*(byte[] mediaBuf, String mediaType, String name,
DateTime lastModified) {
super(mediaType);
this.mediaBuf = mediaBuf;
this.contentLength = buf.length();
this.lastModified = lastModified;
this.name = name;
}
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(buf);
}
public OutputStream getOutputStream() {
throw new UnsupportedOperationException("Cannot write to *
MediaFileSource*");
}
public File getMediaFile() {
throw new UnsupportedOperationException("No associated file object for
memory source");
}
}
On Tue, Aug 23, 2011 at 2:53 PM, Ikai Lan (Google) <[email protected]>wrote:
> Hah, I should have looked at the code. Yeah, my example writes the thing to
> disk. Thanks for the catch, Stephen!
>
> The GData protocol is open source, so you can probably poke around and
> figure out what it actually does with the File instance. If you look at this
> code here:
>
>
> http://www.google.com/codesearch#EOYaOg_yTgg/trunk/java/src/com/google/gdata/data/media/MediaFileSource.java&q=mediafilesource%20package:http://gdata-java-client%5C.googlecode%5C.com
>
> MediaFileSource has a getInputStream() method that just turns the File into
> an InputStream *anyway*. You can probably create your own subclass of
> BaseMediaSource that takes an InputStream and just directly return that.
>
> --
> Ikai Lan
> Developer Programs Engineer, Google App Engine
> plus.ikailan.com | twitter.com/ikai
>
>
>
> On Tue, Aug 23, 2011 at 2:42 PM, Stephen Johnson
> <[email protected]>wrote:
>
>> A File object isn't really the file, it's a reference to the file and you
>> can use it to get its associated metadata (permissions,size,etc.) The
>> example Ikai is referring to creates a new file on disk which isn't allowed
>> on AppEngine so this isn't going to work. Nicolo, perhaps you can create
>> your own multi-part http request and post it using the protocol instead of
>> the API using URLFetch. An example from the docs is shown below. Definitely
>> not as easy as the API.
>>
>> Stephen
>> www.cortexconnect.com
>>
>> POST /feeds/content/domainName/siteName HTTP/1.1
>> Host: sites.google.com
>> GData-Version: 1.4
>> Authorization: <your authorization header here>
>> Content-Length: 7221984
>> Content-Type: multipart/related; boundary=END_OF_PART
>> --END_OF_PART
>> Content-Type: application/atom+xml
>> <entry xmlns="http://www.w3.org/2005/Atom">
>> <category scheme="http://schemas.google.com/g/2005#kind"
>> term="http://schemas.google.com/sites/2008#attachment"
>> label="attachment"/>
>> <link rel="http://schemas.google.com/sites/2008#parent"
>> type="application/atom+xml"
>>
>> href="https://sites.google.com/feeds/content/domainName/siteName/PARENT_ENTRY_ID"/>
>> <title>PDF File</title>
>> <summary>HR packet</summary>
>> </entry>
>> --END_OF_PART
>> Content-Type: application/pdf
>>
>> ... pdf contents here ...
>>
>> --END_OF_PART--
>>
>>
>> On Tue, Aug 23, 2011 at 1:48 PM, Ikai Lan (Google) <[email protected]>wrote:
>>
>>> I just took a look at the GData library, and it shouldn't be that hard to
>>> convert an InputStream to a File instance. Here's something I found
>>> searching:
>>>
>>> http://www.roseindia.net/java/java-conversion/InputstreamToFile.shtml
>>>
>>> --
>>> Ikai Lan
>>> Developer Programs Engineer, Google App Engine
>>> plus.ikailan.com | twitter.com/ikai
>>>
>>>
>>>
>>> On Sun, Aug 21, 2011 at 8:01 AM, Nicolò Brognoli <
>>> [email protected]> wrote:
>>>
>>>> Hello,
>>>> I want to upload an InputStream object onto Google sites. The sites API
>>>> manage only "File" objects, but I can't use the OuputStream to generate the
>>>> File from the InputStream.
>>>>
>>>> How can I upload the InputStream object to Google Sites?
>>>> Should I do that with a POST request? And if so, how can I create such
>>>> request?
>>>>
>>>> Thanks.
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Google App Engine for Java" group.
>>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msg/google-appengine-java/-/xu1WcvMjvXMJ.
>>>> To post to this group, send email to
>>>> [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected].
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/google-appengine-java?hl=en.
>>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Google App Engine for Java" group.
>>> To post to this group, send email to
>>> [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected].
>>> For more options, visit this group at
>>> http://groups.google.com/group/google-appengine-java?hl=en.
>>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Google App Engine for Java" group.
>> To post to this group, send email to
>> [email protected].
>> To unsubscribe from this group, send email to
>> [email protected].
>> For more options, visit this group at
>> http://groups.google.com/group/google-appengine-java?hl=en.
>>
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google App Engine for Java" group.
> To post to this group, send email to
> [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/google-appengine-java?hl=en.
>
--
You received this message because you are subscribed to the Google Groups
"Google App Engine for Java" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine-java?hl=en.