com.GTDF.server.FileUploadServlet.java Source code

Java tutorial

Introduction

Here is the source code for com.GTDF.server.FileUploadServlet.java

Source

/*
 * Copyright 2007 GoogleTransitDataFeed
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package com.GTDF.server;

import java.io.*;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FilenameUtils;

import com.GTDF.server.WikiUserImpl;

public class FileUploadServlet extends HttpServlet {

    static final long serialVersionUID = 0;

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String rootDirectory = getServletConfig().getInitParameter("TRANSFORM_HOME");
        String workDirectory = getServletConfig().getInitParameter("TRANSFORM_DIR");
        String prefixDirectory = "";
        boolean writeToFile = true;
        String returnOKMessage = "OK";
        String username = "";
        String authResult = "";

        boolean isMultipart = ServletFileUpload.isMultipartContent(request);

        PrintWriter out = response.getWriter();

        // Create a factory for disk-based file items 
        if (isMultipart) {

            // We are uploading a file (deletes are performed by non multipart requests) 
            FileItemFactory factory = new DiskFileItemFactory();

            // Create a new file upload handler 
            ServletFileUpload upload = new ServletFileUpload(factory);
            // 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()) {

                        // Hidden field containing username - check authorization
                        if (item.getFieldName().equals("username")) {
                            username = item.getString();
                            String wikiDb = getServletConfig().getInitParameter("WIKIDB");
                            String wikiDbUser = getServletConfig().getInitParameter("WIKIDB_USER");
                            String wikiDbPassword = getServletConfig().getInitParameter("WIKIDB_PASSWORD");
                            String wikiNoAuth = getServletConfig().getInitParameter("NOAUTH"); // v1.5 Check parameter NOAUTH
                            WikiUserImpl wikiUser = new WikiUserImpl();
                            authResult = wikiUser.wikiUserVerifyDb(username, wikiDb, wikiDbUser, wikiDbPassword,
                                    wikiNoAuth);
                            if (authResult != "LOGGED") {
                                out.print(authResult);
                                return;
                            } else
                                new File(rootDirectory + workDirectory + '/' + username).mkdirs();
                        }

                        // Hidden field containing file prefix to create subdirectory
                        if (item.getFieldName().equals("prefix")) {
                            prefixDirectory = item.getString();
                            new File(rootDirectory + workDirectory + '/' + username + '/' + prefixDirectory)
                                    .mkdirs();
                            prefixDirectory += '/';
                        }
                    } else {
                        if (writeToFile) {
                            String fileName = item.getName();
                            if (fileName != null && !fileName.equals("")) {
                                fileName = FilenameUtils.getName(fileName);
                                File uploadedFile = new File(rootDirectory + workDirectory + '/' + username + '/'
                                        + prefixDirectory + fileName);
                                try {
                                    item.write(uploadedFile);
                                    String hostedOn = getServletConfig().getInitParameter("HOSTED_ON");
                                    out.print("Infile at: " + hostedOn + workDirectory + '/' + username + '/'
                                            + prefixDirectory + fileName);
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
                            }
                        } else {
                        }
                    }
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
            }
        } else {

            //Process a request to delete a file 
            String[] paramValues = request.getParameterValues("uploadFormElement");
            for (int i = 0; i < paramValues.length; i++) {
                String fileName = FilenameUtils.getName(paramValues[i]);
                File deleteFile = new File(rootDirectory + workDirectory + fileName);
                if (deleteFile.delete()) {
                    out.print(returnOKMessage);
                }
            }
        }

    }

}