Package org.appfuse.webapp.server.controllers

Source Code of org.appfuse.webapp.server.controllers.FileUploadController$FileUpload

package org.appfuse.webapp.server.controllers;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang.StringUtils;
import org.appfuse.Constants;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.support.MessageSourceAccessor;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.context.ServletContextAware;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.multipart.support.ByteArrayMultipartFileEditor;

/**
* Controller class to upload Files.
* <p/>
* <p>
* <a href="FileUploadFormController.java.html"><i>View Source</i></a>
* </p>
*
* @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
*/
@Controller
@RequestMapping("/fileupload*")
public class FileUploadController implements ServletContextAware {

    private MessageSourceAccessor messages;
  private ServletContext servletContext;
 
    public void setServletContext(ServletContext servletContext) {
        this.servletContext = servletContext;
    }
   
    @Autowired
    public void setMessages(MessageSource messageSource) {
      messages = new MessageSourceAccessor(messageSource);
    }
 
    /**
     *
     */
  public  static class FileUpload {
      private String name;
      private byte[] file;

      /**
       * @return Returns the name.
       */
      public String getName() {
          return name;
      }

      /**
       * @param name The name to set.
       */
      public void setName(String name) {
          this.name = name;
      }

      public void setFile(byte[] file) {
          this.file = file;
      }

      public byte[] getFile() {
          return file;
      }
  }
 
    @InitBinder
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) {
        binder.registerCustomEditor(byte[].class, new ByteArrayMultipartFileEditor());
   
 
    @RequestMapping(method = RequestMethod.POST)
    public void onSubmit(@ModelAttribute FileUpload fileUpload, BindingResult errors, HttpServletRequest request, HttpServletResponse response)
            throws Exception {


      JSONObject jsonObject = new JSONObject();
     
      if(StringUtils.isBlank(fileUpload.getName())) {
            Object[] args = new Object[]{messages.getMessage("uploadForm.name", request.getLocale())};
            errors.rejectValue("name", "errors.required", args, "Name");
      }
      // validate a file was entered
        if (fileUpload.getFile().length == 0) {
            Object[] args = new Object[]{messages.getMessage("uploadForm.file", request.getLocale())};
            errors.rejectValue("file", "errors.required", args, "File");
        }
        if(errors.hasErrors()) {
          List<String> errorMessages = new ArrayList<String>();
          for (ObjectError error : errors.getAllErrors()) {
        errorMessages.add(messages.getMessage(error));
      }
          jsonObject.put("errorMessages", errorMessages);
          sendResponse(response, jsonObject);
          return;
        }

        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest.getFile("file");

        // the directory to upload to
        String uploadDir = servletContext.getRealPath("/resources") + "/" + request.getRemoteUser() + "/";

        // Create the directory if it doesn't exist
        File dirPath = new File(uploadDir);

        if (!dirPath.exists()) {
            dirPath.mkdirs();
        }

        //retrieve the file data
        InputStream stream = file.getInputStream();

        //write the file to the file specified
        OutputStream bos = new FileOutputStream(uploadDir + file.getOriginalFilename());
        int bytesRead;
        byte[] buffer = new byte[8192];

        while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
            bos.write(buffer, 0, bytesRead);
        }

        bos.close();

        //close the stream
        stream.close();
       

        // place the data into the request for retrieval on next page
        jsonObject.put("name", fileUpload.getName());
        jsonObject.put("fileName", file.getOriginalFilename());
        jsonObject.put("contentType", file.getContentType());
        jsonObject.put("size", file.getSize() + " bytes");
        jsonObject.put("location", dirPath.getAbsolutePath() + Constants.FILE_SEP + file.getOriginalFilename());

        String link = request.getContextPath() + "/resources" + "/" + request.getRemoteUser() + "/";
        jsonObject.put("link", link + file.getOriginalFilename());

        sendResponse(response, jsonObject);
    }
   
    private void sendResponse(HttpServletResponse response, JSONObject jsonObject) throws IOException {
      response.setContentType("text/html");
      response.getWriter().write(jsonObject.toString());
      response.getWriter().flush();
    }
}
TOP

Related Classes of org.appfuse.webapp.server.controllers.FileUploadController$FileUpload

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.