文件上传

package com.huawei.iop.service.worldCUP.userCluster;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.json.JSONException;
import org.json.JSONObject;

import com.huawei.iop.common.Developer;
import com.huawei.iop.common.IopConst;
import com.huawei.iop.util.ConfigPropertiesUtil;
import com.huawei.iop.util.IOHelperUtil;

/**
 * 上传用户自定义群文件
 * 
 * @author
 * 
 */
public class UploadGroupFileServlet extends HttpServlet
{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    protected final static Logger logger = Logger.getLogger("runtime");

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException
    {
        req.setCharacterEncoding("utf-8");

        String resultfilename = "";
        //
        /*
         * String systemBasePath = "/home/iop/download/taskresults"; if
         * (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") !=
         * -1) { systemBasePath = "D:/"; }
         */
        // 编写时间格式
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        String d = sdf.format(date);
        d = d.substring(0, 6);

        // 獲取當前時間的年月
        SimpleDateFormat df = new SimpleDateFormat("yyyyMM");
        String dateTime = df.format(date);

        // 确定文件路径
        String resultPathFromConf = ConfigPropertiesUtil.readValue("uploadPath") + dateTime;// download/resultgroups
        String tempPath = null;
        if (StringUtils.isEmpty(resultPathFromConf))
        {
            tempPath = "/home/iop/download/definedGroupUpload/" + dateTime;
            File tmpFile = new File(tempPath);
            if (!tmpFile.exists())
            {
                boolean b = tmpFile.mkdirs();
                if (b)
                {
                    logger.info("tmpFile.mkdirs():" + b);
                }
            }
            resultPathFromConf = tempPath;
        }

        JSONObject object = new JSONObject();
        File dir = new File(resultPathFromConf);
        if (!dir.exists() || !dir.isDirectory())
        {
            boolean b = dir.mkdir();
            if (b)
            {
                logger.info("dir.mkdir():" + b);
            }
        }

        DiskFileItemFactory factory = new DiskFileItemFactory();

        factory.setRepository(dir);
        factory.setSizeThreshold(1024 * 1024);

        ServletFileUpload upload = new ServletFileUpload(factory);

        try
        {
            List<FileItem> list = (List<FileItem>) upload.parseRequest(req);

            for (FileItem item : list)
            {
                String name = item.getFieldName();

                // 表单信息不是是普通文本信息
                if (!(item.isFormField()))
                {
                    String value = item.getName();

                    int start = value.lastIndexOf("\\");

                    String filename = value.substring(start + 1);
                    req.setAttribute(name, filename);
                    // 前台判断文件是否已上传过,若传过,则提示是否再次上传,确定再次上传提示用户覆盖先前文件
                    File file = new File(dir, filename);
                    if (file.exists() && file.canRead() && file.canWrite())
                    {
                        Developer.info("UploadGroupFileServlet.doPost()", "File exists," + "path=" + dir + "filename=" + filename);
                        logger.error("UploadGroupFileServlet.doPost():File exists," + "path=" + dir + "filename=" + filename);
                    }
                    d = sdf.format(date);
                    filename = "Upload" + d.substring(0, 14) + filename;
                    resultfilename = filename;
                    OutputStream out = null;
                    InputStream in = null;
                    try
                    {
                        in = item.getInputStream();
                        out = new FileOutputStream(new File(dir, filename));
                        int size = in.available();
                        if (size != 0)
                        {

                            int length = 0;
                            byte[] buf = new byte[1024];

                            // 如文件存在且不为空,则备份到/home/iopdevelop/tempfiles目录下
                            if (file.exists() && file.canRead() && file.canWrite())
                            {
                                OutputStream obu = null;
                                InputStream ibu = null;
                                File BACKUPPATH = null;
                                String BACKUPFILENAME = null;
                                Developer.info("UploadGroupFileServlet.doPost()", "begin to write file" + "path=" + dir + "filename="
                                        + filename);
                                logger.error("UploadGroupFileServlet.doPost():begin to write file" + "path=" + dir + "filename=" + filename);
                                BACKUPPATH = new File(resultPathFromConf);
                                BACKUPFILENAME = filename + System.currentTimeMillis();
                                try
                                {
                                    obu = new FileOutputStream(new File(BACKUPPATH, BACKUPFILENAME));// backup
                                    // files
                                    ibu = item.getInputStream();
                                    while ((length = ibu.read(buf)) != -1)
                                    {
                                        obu.write(buf, 0, length);
                                    }
                                }
                                catch (Exception e)
                                {
                                    logger.info("obu is failed");
                                    e.printStackTrace();
                                }
                                finally
                                {
                                    if (null != ibu)
                                    {
                                        IOHelperUtil.close(ibu);
                                    }
                                    if (null != obu)
                                    {
                                        IOHelperUtil.close(obu);
                                    }
                                }
                                Developer.info("UploadGroupFileServlet.doPost()", "backup File" + "path=" + BACKUPPATH + "filename="
                                        + BACKUPFILENAME);
                                logger.info("UploadGroupFileServlet.doPost(), backup File" + "path=" + BACKUPPATH + "filename="
                                        + BACKUPFILENAME);
                            }

                            while ((length = in.read(buf)) != -1)
                            {
                                out.write(buf, 0, length);

                            }
                            object.put("statusCode", IopConst.IOP_RUN_SUCCESS);
                            Developer.info("UploadGroupFileServlet.doPost()", "the request is" + req);
                            logger.info("UploadGroupFileServlet.doPost(), the request is" + req);
                            Developer.info("IO closed", "UploadGroupFileServlet.doPost()");
                            logger.info("IO closed, UploadGroupFileServlet.doPost()");
                        }
                        else
                        {
                            logger.info("in.available() = 0");
                        }
                    }
                    catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                    finally
                    {
                        IOHelperUtil.close(in, out);
                    }

                }
            }
            object.put("resultfilename", resultfilename);
        }
        catch (FileUploadException | JSONException e1)
        {
            e1.printStackTrace();
            try
            {
                object.put("statusCode", IopConst.IOP_RUN_FAILSE);// 执行失败
                logger.info("object.put(statusCode) IopConst.IOP_RUN_FAILSE");
            }
            catch (JSONException e)
            {
                Developer.info("UploadGroupFileServlet executed but ERROR:" + e1, "UploadGroupFileServlet.doPost()");
                logger.info("UploadGroupFileServlet executed but ERROR:" + e1
                        + "UploadGroupFileServlet.doPost(); IO closed, UploadGroupFileServlet.doPost()");
                e.printStackTrace();
            }
            finally
            {
                
            }

        }
        finally
        {

            ServletOutputStream writer = response.getOutputStream();
            response.setContentType("text/html;charset=UTF-8");
            writer.write(object.toString().getBytes("UTF-8"));
            writer.flush();
            writer.close();
            writer = null;
        }
    }
}

 

posted @ 2018-07-10 16:54  DoubleW  阅读(161)  评论(0编辑  收藏  举报