Hi wildarmss,
I've successfully uploaded a document with a restlet.

here is my java client:
----------------------------------------------------------------------
import org.restlet.Client;
import org.restlet.data.ChallengeResponse;
import org.restlet.data.ChallengeScheme;
import org.restlet.data.MediaType;
import org.restlet.data.Method;
import org.restlet.data.Protocol;
import org.restlet.data.Request;
import org.restlet.data.Response;
import org.restlet.resource.FileRepresentation;
import org.restlet.resource.Representation;

public class UploadClient {

        public static void main(String[] args) {

        Client client = new Client(Protocol.HTTP);

        Request request = new Request(Method.POST, 
"http://localhost:8080/nuxeo/restAPI/default/6e7a8b99-45e4-444b-82c6-601774984c53/reunion20080925.pdf/upload";);
        Representation representation = new 
FileRepresentation("c:\\reunion20080925.pdf", MediaType.APPLICATION_PDF,10);
        request.setEntity(representation);
        ChallengeResponse challengeResponse = new ChallengeResponse(
                ChallengeScheme.HTTP_BASIC, "Administrator", "Administrator");
        request.setChallengeResponse(challengeResponse);

        Response response = client.handle(request);
        System.out.println(response.getStatus());
        }
}
-----------------------------------------------------------------------------------

Here is my upload restlet:
-----------------------------------------------------------------------------------
package com.mypackage;

import static org.jboss.seam.ScopeType.EVENT;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.dom4j.Element;
import org.dom4j.dom.DOMDocument;
import org.dom4j.dom.DOMDocumentFactory;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.nuxeo.common.utils.FileUtils;
import org.nuxeo.ecm.core.api.ClientException;
import org.nuxeo.ecm.core.api.CoreSession;
import org.nuxeo.ecm.core.api.DocumentModel;
import org.nuxeo.ecm.core.api.IdRef;
import org.nuxeo.ecm.platform.ui.web.api.NavigationContext;
import org.nuxeo.ecm.platform.ui.web.api.SimpleFileManager;
import org.nuxeo.ecm.platform.util.RepositoryLocation;
import org.restlet.data.MediaType;
import org.restlet.data.Request;
import org.restlet.data.Response;
import org.restlet.ext.fileupload.RestletFileUpload;
import org.restlet.resource.Representation;
import org.nuxeo.ecm.platform.ui.web.restAPI.BaseNuxeoRestlet;

@Name("uploadMyDocument")
@Scope(EVENT)
public class UploadMyDocument extends BaseNuxeoRestlet {

    @In(create = true)
    protected NavigationContext navigationContext;

    protected CoreSession documentManager;

    @In(create = true)
    protected SimpleFileManager FileManageActions;

    @Override
    public void handle(Request req, Response res) {
        String repo = (String) req.getAttributes().get("repo");
        String docid = (String) req.getAttributes().get("docid");
        String fileName = (String) req.getAttributes().get("filename");

        DOMDocumentFactory domfactory = new DOMDocumentFactory();
        DOMDocument result = (DOMDocument) domfactory.createDocument();

        DocumentModel dm;

        try {
            navigationContext.setCurrentServerLocation(new RepositoryLocation(
                    repo));
            documentManager = navigationContext.getOrCreateDocumentManager();
            dm = documentManager.getDocument(new IdRef(docid));
        } catch (ClientException e) {
            handleError(res, e);
            return;
        }

        if (dm != null) {
            Representation repr = req.getEntity();
            RestletFileUpload fu = new RestletFileUpload();
            List<FileItem> fiList = null;
            try {
                fiList = fu.parseRequest(req);
            } catch (FileUploadException e) {
                // handleError(res, e);
                // return;
                // XXX : this fails for requests not sent via browser
            }

            if (fiList == null) {
                // mono import

                try {
                    InputStream input = repr.getStream();
                    MediaType mediaType = repr.getMediaType();
                    String mimeType = mediaType.getName();
                    byte[] content = FileUtils.readBytes(input);

                    try {
                        String returnCode = FileManageActions.addBinaryFile(
                                content, mimeType, fileName, new IdRef(docid));
                        Element upload = result.addElement("upload");
                        upload.setText(returnCode);
                        result.setRootElement(upload);

                    } catch (ClientException e) {
                        handleError(res, e);
                        return;
                    }
                    //
                } catch (IOException e) {
                    handleError(res, e);
                    return;
                }
            } else {
                // multiple file upload
                Element uploads = result.addElement("uploads");
                result.setRootElement(uploads);

                for (FileItem fileItem : fiList) {

                    Element upload = result.addElement("upload");
                    ((org.w3c.dom.Element) 
uploads).appendChild((org.w3c.dom.Element) upload);

                    fileName = fileItem.getName();
                    String mimeType = fileItem.getContentType();
                    byte[] content;
                    try {
                        content = 
FileUtils.readBytes(fileItem.getInputStream());
                    } catch (IOException e) {
                        upload.setText("ERROR : " + e.getMessage());
                        continue;
                    }

                    try {
                        String returnCode = FileManageActions.addBinaryFile(
                                content, mimeType, fileName, new IdRef(docid));
                        upload.setText(returnCode);
                    } catch (ClientException e) {
                        upload.setText("ERROR : " + e.getMessage());
                        continue;
                    }
                }
            }
        }

        res.setEntity(result.asXML(), MediaType.TEXT_XML);
    }

}
---------------------------------------------------------------

Here is my OSGI-INF/restlets-contrib.xml file :
---------------------------------------------------------------
<?xml version="1.0"?>
<component name="org.nuxeo.ecm.platform.ui.web.restAPI.ebee">

        <extension
                
target="org.nuxeo.ecm.platform.ui.web.restAPI.service.PluggableRestletService"
                point="restlets">

                <restletPlugin name="uploadMyDocument"
                        class="com.mypackage.UploadMyDocument" enabled="true"
                        useSeam="true">
                        <urlPatterns>
                                <urlPattern>/{repo}/{docid}/{filename}/upload
                                </urlPattern>
                        </urlPatterns>
                </restletPlugin>
        </extension>
</component> 
-----------------------------------------------------------

Here is the enf of my MANIFEST.MF file:
---------------------------------------------------------------
Nuxeo-Component: OSGI-INF/theme-contrib.xml,
 OSGI-INF/event-listener-contrib.xml,OSGI-INF/restlets-contrib.xml
---------------------------------------------------------------

Hope this help you.
Regards,
Xavier.
_______________________________________________
ECM mailing list
[email protected]
http://lists.nuxeo.com/mailman/listinfo/ecm

Reply via email to