设为首页 收藏本站
查看: 822|回复: 0

[经验分享] org.apache.commons.fileupload 文件上传至数据库

[复制链接]

尚未签到

发表于 2017-1-11 09:08:53 | 显示全部楼层 |阅读模式
  package cn.com.capture.service.rest.resource.upload.impl;
  import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Iterator;
import java.util.List;
  import javax.servlet.http.HttpServletRequest;
  import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.restlet.representation.Representation;
  import cn.com.capture.common.db.BaseDO;
import cn.com.capture.service.rest.resource.base.BaseAuthResource;
import cn.com.capture.service.rest.resource.upload.FileUpload;
  public class FileUploadImpl extends BaseAuthResource implements FileUpload {
  @Override
 public Representation doFileUpload(Representation resp) {
   executeUpload(httpServletRequest);
  return null;
 }
  /**
  * 处理上传文件
  *
  * @param request
  * @throws UnsupportedEncodingException
  */
 public void executeUpload(HttpServletRequest request) {
//  request.setCharacterEncoding("UTF-8");
  String gps_x = "123.122323";
  String gps_y = "123.122323";
  String user = "capture";
  boolean isMultipart = ServletFileUpload.isMultipartContent(request);
  if (isMultipart == true) {
   try {
    DiskFileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);
    upload.setHeaderEncoding("iso8859-1");
    List<FileItem> fileItems = upload.parseRequest(request); // 得到所有的表单域,它们目前都被当作FileItem
    String uploadPath = "d:\\upload\\";
    File file = new File(uploadPath);
    if (!file.exists()) { // 如果没有此目录就创建此目录
     file.mkdir();
    }
    int faultid = 0;
    Iterator<FileItem> iter = fileItems.iterator();
    while (iter.hasNext()) { // 依次处理每个表单域
     FileItem item = (FileItem) iter.next();
     if (item.isFormField()) { // 如果item是正常的表单域
      String faultremark = new String(item.getString().getBytes("iso8859-1"),"utf-8"); //中文编码
//      System.out.println("故障描述:   "+faultremark);
      //设置相同描述信息 并返回id 给以其附件信息id
      faultid = setFaultPointInfo(faultremark,gps_x,gps_y,user);
     } else {  // 如果item是文件上传表单域
      String filename = item.getName();
      //new String(item.getName().getBytes("iso8859-1"),"utf-8");  //得到文件名
       String filetype = filename.substring(filename.lastIndexOf("."),filename.length()); //文件后缀
      InputStream is = item.getInputStream(); //此处已经得到上传文件的输入流
      String filepath = uploadPath +filename;  //此处的filename可以改名存储
      if (new File(filepath).exists()) { // 上传文件是否存在
       new File(filepath).delete(); // 存在就删除
      }
      if (!filepath.equals("")) { // 如果文件名不为空
       FileOutputStream fos = new FileOutputStream(filepath);
       byte[] buffer = new byte[10240];
       int count = 0;
       while ((count = is.read(buffer)) > 0) {
        fos.write(buffer, 0, count); // 开始上传至目录文件
       }
       fos.close();
       is.close();
       FileInputStream inStream = new FileInputStream(new File(filepath)); //根据文件路径得到其输入流
       writeMedia(faultid, inStream, filepath,filetype); // 根据文件照片信息写入数据库
       System.out.println("文件上传成功");
      }
     }
    }
//    readMedia("andiioreUser");
    System.out.println("取出文件成功");
   } catch (Exception e) {
    e.printStackTrace();
   }
  } else {
   System.out.println("请求表单类型不对。。。。the enctype must be multipart/form-data");
  }
 }
  /**
  * 设置某个故障点信息 并返回表记录id
  *
  * @return
  */
 public int setFaultPointInfo(String remarks, String gps_x, String gps_y,
   String username) {
  String inserSql = "insert into C_WEB_FAULTPONTINFO(REMARK,GPS_X,GPS_Y,USERNAME) values('"
    + remarks
    + "','"
    + gps_x
    + "','"
    + gps_y
    + "','"
    + username
    + "')";
  BaseDO.getInstance().executeUpdate(inserSql);
  return BaseDO.getInstance().getTableRecord("C_WEB_FAULTPONTINFO_ID",
    "C_WEB_FAULTPONTINFO");
 }
  /**
  * 根据故障点信息设置故障点的各种媒体信息
  *
  * @return
  */
 public boolean writeMedia(int faultid, FileInputStream inStream,
   String faultpath, String faultinfo) {
  boolean flag = false;
  String sql = "insert into C_WEB_FAULTMEDIA(C_WEB_FAULTPONTINFO_ID,FAULTMEDIAFILE,FAULTMEDIAPATH,FAULTINFO) values(?,?,?,?)";
  BaseDO bd = BaseDO.getInstance();
  Connection conn = bd.getConnection();
  PreparedStatement pstmt = null;
  try {
   pstmt = conn.prepareStatement(sql);
   pstmt.setInt(1, faultid);
   pstmt.setBinaryStream(2, inStream, inStream.available()); // 字符流写入数据库
   pstmt.setString(3, faultpath);
   pstmt.setString(4, faultinfo);
   pstmt.executeUpdate(); // 执行插入操作
   inStream.close();
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   bd.close(pstmt, conn);
  }
  return flag;
 }
  /**
  * 根据用户名读取该用户上传的媒体文件
  * @param username
  * @return
  */
 public String readMedia(String username) {
  String sql = "select FAULTMEDIAPATH,FAULTMEDIAFILE from C_WEB_FAULTMEDIA a,C_WEB_FAULTPONTINFO b where A.C_WEB_FAULTPONTINFO_ID (+)= B.C_WEB_FAULTPONTINFO_ID"
    + " and B.USERNAME = '"+username+"'";
  BaseDO bd = BaseDO.getInstance();
  Connection conn = bd.getConnection();
  PreparedStatement pstmt = null;
  ResultSet rs = null;
  try {
   pstmt = conn.prepareStatement(sql);
   rs = pstmt.executeQuery();
   while(rs.next()){
    FileOutputStream outStream = new FileOutputStream(rs.getString("FAULTMEDIAPATH")); //rs.getString("FAULTMEDIAPATH")
    InputStream inStream = rs.getBinaryStream("FAULTMEDIAFILE"); //得到数据库存放媒体文件的值
    byte[] buf = new byte[10240];
    int len;
    while ((len = inStream.read(buf)) > 0) {
     outStream.write(buf, 0, len);
    }
    inStream.close();
    outStream.close();
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   bd.close(rs, pstmt, conn);
  }
  return null;
 }
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-326788-1-1.html 上篇帖子: Apache服务器使用.htaccess实现图片防盗链教程 下篇帖子: APACHE 流量控制及连接数限制(bandwidth)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表