You are viewing a plain text version of this content. The canonical link for it is here.
Posted to slide-user@jakarta.apache.org by Stuart MacPherson <ap...@dsl.pipex.com> on 2003/08/19 12:32:38 UTC

Uploaded file shows wrongly as a collection?!

I have a Servlet that accepts a file upload via POST, and then parses it
using Commons FileUpload (along with some form fields to proppatch), and
writes the resultant file to Slide.  Trouble is that for a test plain text
file, the Directory Listing shows a collection instead of a text file after
upload… with the same name… the URI is /files/errmsg.txt/ and you can
navigate into it like any other folder!  Any ideas why it isn’t putting a
text file like it should be?!  It worked once, and once only, so there is
the possibility that it could be breaking the upload nearly every time…?  
 
The bizarre thing is that it prints TWO responses from the Servlet…  Firstly
“Problem with processing uploaded file type 1” and THEN “File accepted,
thankyou!” on the same line!  It looks like this:
 
Problem with processing uploaded file type 1File accepted, thankyou!
 
Now this could just be me being crap at programming… or it could be
something more odd… anyone who has an idea, please hit me with the feedback!
 
Also, (I am using JDBCDescriptorsStore) it seems to be neglecting to write
anything to the ‘revision’, ‘property’ and ‘latestrevision’ tables for the
uploaded ‘file’… although the one time that it did work, it did so!
 
Any ideas from seasoned (or otherwise) Sliders will be gratefully accepted…
 
stu
 
 
 
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import org.apache.commons.fileupload.*;
import org.apache.util.HttpURL;
import org.apache.webdav.lib.WebdavResource;
import org.apache.commons.httpclient.*;
import org.apache.slide.common.*;
import org.apache.slide.authenticate.*;
import org.apache.slide.content.*;
import org.apache.slide.lock.*;
import org.apache.slide.security.*;
import org.apache.slide.structure.*;
 
public class ReceiveUploadServlet extends HttpServlet {
            
            /**
     * HTTP Date format pattern (RFC 2068, 822, 1123).
     */
    public static final String DATE_FORMAT = "EEE, d MMM yyyy kk:mm:ss z";
    
    /**
     * Date formatter.
     */
    private static final DateFormat formatter =
        new SimpleDateFormat(DATE_FORMAT);
            
            private String fileName;
            private String destPath;
            private String fullFileName;
            private String destFileName;
            
            private HttpSession session;
            
            protected NamespaceAccessToken token;
            
            private Hashtable props;
            
            private WebdavResource wr;
                        
            
            public void doPost(HttpServletRequest request, 
                        HttpServletResponse response) throws IOException {
                                    
                        session = request.getSession();
                        
                        String namespaceName;
                        
                        props = new Hashtable(5);
                        
                        if (token == null) {
                                    
                                    namespaceName =
request.getContextPath();
            if ((namespaceName == null) || (namespaceName.equals("")))
                        namespaceName = Domain.getDefaultNamespace();
            while (namespaceName.startsWith("/"))
                        namespaceName = namespaceName.substring(1);
            token = Domain.accessNamespace
                        (new SecurityToken(this), namespaceName);
                        
            //}
            //catch (UnavailableException ue) {
                        
            //          System.out.println("Namespace " + namespaceName +
              //                     " not accessible");                    

                        //ue.printStackTrace();
        
                        //if (token == null) {
                        //          System.out.println(
                        //                      "Could not access namespace
" + namespaceName + ".");
                        //          throw new
UnavailableException("Namespace " + namespaceName +
                //                  " not accessible"); 
            //}
            
        }
        
          
                                    
                        boolean isMultiPart =
FileUpload.isMultipartContent(request);
                        
                                                
                        //Create new file upload handler
                        DiskFileUpload upload = new DiskFileUpload();
                        
                        //Set upload parameters
                        String fileStore = new String("C:/temp");
                        upload.setRepositoryPath(fileStore);
                        upload.setSizeThreshold(0);
                        upload.setSizeMax(10000000);
                        
                        //Parse the request
                        
                        try {
                                    
                                    List items =
upload.parseRequest(request);
                                    //Process the uploaded items
                                    Iterator iter = items.iterator();
                        
                                    while (iter.hasNext()) {
                                    
                                                FileItem item =
(FileItem)iter.next();
                                    
                                                if
(item.isFormField()&&!item.getFieldName().equals("upload")) {
                                                            
                                                            try {
                                                                        
                                                                       
processFormField(item);
                                                                        
                                                            }
                                                            catch
(HttpException he) {
                                                
                                                                       
System.out.println("Problem creating file properties");
                                                                       
he.printStackTrace();
                                                            
                                                            }
                                                
                                                }
                                                else {
                                                            
                                                            try {
                                                                        
                                                                       
destPath = (String)session.getAttribute(
                                                                            
        "slideFileDest");
                        
                                                                       
fullFileName = item.getName();
                                                                       
fileName = fullFileName.substring(
                                                                            
        fullFileName.lastIndexOf("\\")+1, 
                                                                            
                    fullFileName.length());
                                                                       
String destURI = new String(destPath+"/"+fileName);
                                                                            
                    
                                                                       
processUploadFile(request, item, destURI);
                        
                                                                       
System.out.println("THE DESTINATION PATH = "+destPath);
                                                                       
System.out.println("The URI is... "+destURI);
                        
                                                                       
//try {
                                    
                                                                       
//          WebdavResource wr = new WebdavResource(fileUrl);
                                    
                                                                        //}
                                                                       
//catch (HttpException he) {
                                    
                                                                       
//          he.printStackTrace();
                                    
                                                                        //}
                        
                                                                        
                                                                        
                                                            }
                                                            catch(Exception
e) {
                                                                        
                                                                       
showResponseMessage(
                                                                            
        "Problem with processing uploaded file type 1",
                                                                            
                    request, response);
                                                                       
e.printStackTrace();
                                                                            
        
                                                            }
                                    
                                                }
                                                
                                    }
                                    
                                    
                        }
                        catch (FileUploadException fue) {
                                    
                                    showResponseMessage("Problem with Upload
type 2...",
                                                request, response);
                                    fue.printStackTrace();
                                    
                        }
                        
                        try {
                                    wr.proppatchMethod(props);
                                    wr.proppatchMethod("lastAccessedDate",
formatter.format(new Date()));
                                    System.out.println("PATCHED ALL
PROPERTIES");
                                                
                        }
                        catch (HttpException he) {
                                                
                                    System.out.println("Problem with
patching property Hashtable");
                                    he.printStackTrace();
                                                
                        }
                        
                        showResponseMessage("File accepted, thankyou!", 
                                    request, response);
                                                                        
                                                
            }
            
            public void processFormField(FileItem item) throws HttpException
{
                        
                        
                        
                        String name = item.getFieldName();
                        String value = item.getString();
                        props.put(name, value);
                        
                        System.out.println("Field content = "+name+"  value
= "+value);
                        
            }
            
            
            public void processUploadFile(HttpServletRequest request,
FileItem item, 
                        String destURI) throws Exception {
                        
                        System.out.println("Filename = "+fullFileName);
                        String contentType = item.getContentType();
                        System.out.println("Content Type = "+contentType);
                        boolean isInMemory = item.isInMemory();
                        System.out.println("In Memory? =
"+Boolean.toString(isInMemory));
                        long sizeInBytes = item.getSize();
                        System.out.println("Size in bytes =
"+Long.toString(sizeInBytes));
                        
                        //File uploadedFile = new File(destURI);
                        
                        Content content = token.getContentHelper();
        Lock lock = token.getLockHelper();
        Security security = token.getSecurityHelper();
        Structure structure = token.getStructureHelper();
        
        //String username = security.getPrincipal(slideToken).toString();
        String username = new String("root");
        String password = new String("root");
                        
                        token.begin();
                        
                        CredentialsToken credToken = new
CredentialsToken(new
                                    String(username));
        SlideToken slideToken = new SlideTokenImpl(credToken);
                        
                        SubjectNode subject = new SubjectNode();
        
        //structure.create(slideToken, subject, destPath);
        //content.create(slideToken, destURI, false);
                
        NodeRevisionContent revisionContent = new NodeRevisionContent();
                        //revisionContent.setContent( inputStream1 );
        //content.create(
        //  slideToken, destURI, (new NodeRevisionDescriptor()),
revisionContent );
                        
                        HttpURL hu = new HttpURL(
                                    "http://localhost:8080/slide"+destURI);
                        hu.setUserInfo(username, password);
        wr = new WebdavResource(hu, WebdavResource.ALL, 1);
        //WebdavFile wf = new WebdavFile(wr);
 
                        //if (isInMemory) {
                                                                        
                                    byte[] data = item.get();
                                    //item.write(uploadedFile);
                                    //InputStream uploadedStream =
item.getInputStream();
                                    //FileOutputStream fos = new
FileOutputStream(destURI);
                                    //fos.write(data);
                                   
//wr.putMethod(uploadedStream);                                    
                        //}
                        //else {
                                    
                                    //byte[] data = item.get();
                                    //InputStream uploadedStream =
item.getInputStream();
                                    //FileOutputStream fos = new
FileOutputStream(destURI);
                                    //fos.write(data);
                                    wr.putMethod(data);
                                    //content.create(slideToken, destURI,
false);
                        //}
                        token.commit();
            }
            
            
            public void showResponseMessage(String message,
HttpServletRequest req, 
                        HttpServletResponse resp) throws IOException {
                        
                        resp.setContentType("text/html");
                        
                        //Get the PrintWriter for writing out the response
                        PrintWriter out = resp.getWriter();
                                    
                        //Write the HTML back to the browser
                        out.println("<HTML>");
                        out.println("<BODY>");
                        
                        String clientHost = req.getRemoteHost();
                        out.println(message);
                        
                        out.println("</HTML>");
                        out.println("</BODY>");
                        
            }
            
}