日期:2014-05-16  浏览次数:20650 次

org.apache.commons.fileupload 文件上传至数据库

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 u