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;
}
}
分享到:
相关推荐
这个"org.apache.commons.jar"包是Apache Commons项目的一部分,其中包含了该目录下的一系列资源文件,确保了功能的完整性和多样性。 Apache Commons库的核心理念是创建一系列高质量的、独立的、实用的Java类库,...
本篇文章将详细介绍如何使用Apache Commons FileUpload来实现文件上传操作。 首先,我们需要了解HTTP协议在处理文件上传时的机制。通常,文件上传是通过`multipart/form-data`编码类型实现的,这种编码方式允许在...
// 在下文中上传文件至数据库时,将对这里改写 item.write(new File("d:\\" + m.group(1))); out.print(name+" "+size+" "); } catch (Exception e) { out.println(e); } } else { throw ...
Apache Commons FileUpload和Commons IO两个库是Java中处理文件上传的关键组件,它们为SpringMVC和MyBatis这样的框架提供了强大的支持。本篇文章将深入探讨这两个库以及它们在图片处理中的作用。 首先,`commons-...
【基于commons-fileupload组件的上传下载】是一种在J2EE环境下处理...总的来说,Apache Commons FileUpload组件简化了在JSP和Servlet中处理文件上传和下载的任务,但开发者仍需关注安全性、性能优化和异常处理等方面。
在这个教程中,我们将探讨如何在WebWork 2.2.7的Action中利用Apache Commons FileUpload库来实现文件上传功能,并处理文件流。Apache Commons FileUpload是一个强大的库,专门用于处理HTTP请求中的多部分/表单数据,...
Apache Commons FileUpload是Java中处理文件上传的一个强大库,它简化了这一过程。本教程将详细介绍如何利用commons-fileupload实现文件上传功能,并提供一个简单的实例。 **一、Apache Commons FileUpload简介** ...
总的来说,Apache Commons FileUpload 1.3.3是Java Web开发中处理文件上传不可或缺的工具,结合Apache Commons IO,可以构建出高效、安全的文件上传功能。这两个库都是Java生态系统的重要组成部分,大大提高了开发...
标题中的"commons-fileupload-1.3.3&commons-fileupload-1.3.3架包和代码.rar"提到了Apache Commons FileUpload的1.3.3版本的库及其源码。Apache Commons FileUpload是一个Java库,专门用于处理HTTP协议中的多部分...
1、利用org.apache.commons.fileupload编写的文件上传和下载的前台和后台代码,前台代码是Jsp,后台是用servlet处理,共2个例子,各有不同,比较使用; 2、有用jspSmartupload制作一个文件上传和下载的例子,其制作...
在Java EE开发中,文件上传是一项常见的功能,Apache Commons FileUpload库正是为了处理这个需求而设计的。这个库提供了一套强大的API,使得在Servlet环境中处理文件上传变得简单且高效。下面将详细介绍Apache ...
### Commons-FileUpload 实现文件上传下载 #### 知识点概述 Commons-FileUpload 是 Apache 提供的一个用于处理 HTTP 文件上传的组件。它基于 Servlet 规范,并且能够解析来自 `multipart/form-data` 编码类型的 ...
在开发Java应用程序,尤其是涉及到Web应用中的文件上传功能时,`commons-fileupload.jar`和`commons-io.jar`是两个至关重要的库。这两个JAR文件分别提供了Apache Commons FileUpload和Apache Commons IO项目的功能,...
8. **Commons FileUpload**: 处理 HTTP 请求中的文件上传,简化了上传文件的逻辑。 9. **Commons DBCP**: 数据库连接池组件,可以提高数据库连接的复用性,减少资源消耗。 10. **Commons HttpClient**: 过去的 ...
Apache Commons FileUpload库是一个强大的工具,它使得在Servlet环境中处理文件上传变得简单。本文将详细介绍如何使用Commons FileUpload库来实现文件上传和下载的功能,并提供示例代码。 首先,我们需要理解...
标题和描述中提到的"commons-fileupload-1.2.jar"和"commons-io-1.3.1.jar"是两个在Java开发中常用的开源库,主要用于处理文件上传功能。这两个库是Apache Commons项目的一部分,提供了丰富的文件操作和网络通信功能...
利用org.apache.commons.fileupload编写的文件上传和下载的前台和后台代码,共两个例子,个有不同,费用使用。另有用jspSmartupload制作一个文件上传和下载的例子,其制作的例子能够上传到数据库中。
在Java Web开发中,文件上传是一项常见的功能,`Commons-FileUpload` 是Apache Commons项目提供的一个用于处理HTTP请求中的多部分数据(通常为文件上传)的库。本篇文章将详细讲解如何使用`Commons-FileUpload`进行...