Package com.ponxu.blog4j.web.admin

Source Code of com.ponxu.blog4j.web.admin.FileManage

package com.ponxu.blog4j.web.admin;

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

import javax.servlet.ServletContext;

import com.ponxu.blog4j.Config;
import com.ponxu.blog4j.dao.MongoDAO;
import com.ponxu.run.log.Log;
import com.ponxu.run.log.LogFactory;
import com.ponxu.run.web.FileUpload;
import com.ponxu.run.web.FileUpload.FilePart;
import com.ponxu.run.web.WebApplication;
import com.sina.sae.util.SaeUserInfo;

/**
* 文件上传下载<br>
* <br>
*
* <b>1 本地环境</b><br>
* 上传: 存在在webapp/attachment目录<br>
* 下载: /attachment/filename<br>
* <br>
*
* <b>2 SAE</b><br>
* 上传: 存在Storage, 通过File Wrap操作<br>
* 下载: http://appname-domain.stor.sinaapp.com/fileName<br>
* <br>
*
* <b>3 Cloud Foundry</b><br>
* 上传: 存在Mongodb<br>
* 下载: /file/filename<br>
*
* @author xwz
*/
public class FileManage extends AdminOAuthHandler {
  private static final Log LOG = LogFactory.getLog();

  /** 附件目录 */
  private static final String ATTACHMENT_FOLDER = "attachment";
  /** 附件域名字 */
  private static final String FILEDATA_NAME = "filedata";

  @Override
  protected boolean oauth() {
    if ("get".equalsIgnoreCase(request().getMethod()))
      return true;

    return super.oauth();
  }

  // 下载
  public void get(String fileName) {
    if (Config.isCloudFoundry) {
      try {
        byte[] content = MongoDAO.getFile(fileName);
        if (content != null) {
          response().getOutputStream().write(content);
        }
      } catch (IOException e) {
        // quiet
      }
    }
  }

  // 上传
  public void post() {
    FileUpload fileUpload = new FileUpload(request());
    FilePart filePart = fileUpload.getFilePart(FILEDATA_NAME);

    String fileName = filePart.getFileName();
    File f = new File(fileName);
    fileName = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date())
        + f.getName();

    if (Config.isCloudFoundry) {
      // CloudFoundry 使用mongodb
      MongoDAO.saveFile(fileName, filePart.getFileContent());
    } else {
      // 直接写入本地存储(SAE FileWrap)
      try {
        FileOutputStream out = new FileOutputStream(
            getSavePath(fileName));
        out.write(filePart.getFileContent());
        out.flush();
        out.close();
      } catch (Exception e) {
        LOG.error(e.getMessage(), e);
      }
    }

    renderString(getDownloadPath(fileName));
  }

  // 文件存储路径
  private String getSavePath(String fileName) {
    if (Config.isSAE) {
      return "saestor://" + ATTACHMENT_FOLDER + "/" + fileName;
    }

    // 本地环境
    ServletContext sc = WebApplication.getInstnce().getServletContext();
    String path = sc.getRealPath("/" + ATTACHMENT_FOLDER);
    // 检测文件夹是否存在
    File f = new File(path);
    if (!f.exists()) {
      f.mkdirs();
    }
    return path + "/" + fileName;
  }

  // 文件下载路径
  private String getDownloadPath(String fileName) {
    if (Config.isSAE) {
      return "http://" + SaeUserInfo.getAppName() + "-"
          + ATTACHMENT_FOLDER + ".stor.sinaapp.com/" + fileName;
    } else if (Config.isCloudFoundry) {
      return getContextPath() + "/file/" + fileName;
    }

    // 本地环境
    return getContextPath() + "/" + ATTACHMENT_FOLDER + "/" + fileName;
  }

}
TOP

Related Classes of com.ponxu.blog4j.web.admin.FileManage

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.