package service.servlet;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import service.dao.MyOpenconnection;
import service.utils.StringUtil;
public class UploadVoiceServlet extends HttpServlet
{
/**
*
*/
private static final long serialVersionUID = -8711882267599349679L;
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
Connection connection = null;
try
{
ServletContext s1=this.getServletContext();
String voiceRootPath=s1.getRealPath("/") + "voice/";
// String photoRootPath = getServletContext().getInitParameter(
// "photoRootPath");
connection = MyOpenconnection.getconnection();
//��ô����ļ���Ŀ������
DiskFileItemFactory factory = new DiskFileItemFactory();
//������ʱ����ļ��Ĵ洢�ң�����洢�ҿ��Ժ����մ洢�ļ����ļ��в�ͬ����Ϊ���ļ��ܴ�Ļ���ռ�ù����ڴ��������ô洢�ҡ�
//������ʱ�ļ��洢λ��
String base = voiceRootPath + "tempBase";
File tempBase = new File(base);
if(!tempBase.exists())
tempBase.mkdirs();
factory.setRepository(tempBase);
//���û���Ĵ�С�����ϴ��ļ���������������ʱ���ͷŵ���ʱ�洢�ҡ�
factory.setSizeThreshold(1024*1024);
//�ϴ��������ࣨ��ˮƽAPI�ϴ�������
ServletFileUpload upload = new ServletFileUpload(factory);
// ���õ����ļ�������ϴ�ֵ
upload.setFileSizeMax(10002400000l);
// ��������request�����ֵ
upload.setSizeMax(10002400000l);
upload.setHeaderEncoding("UTF-8");
//���� parseRequest��request������ ����ϴ��ļ� FileItem �ļ���list ��ʵ�ֶ��ļ��ϴ���
Iterator items = upload.parseRequest(request).iterator();
while(items.hasNext()){
FileItem item = (FileItem) items.next();
//��ȡ���������֡�
String name = item.getFieldName();
//�����ȡ�ı���Ϣ����ͨ���ı���Ϣ����ͨ��ҳ�����ʽ���������ַ�����
if(item.isFormField()){
//��ȡ�û�����������ַ�����
String value = item.getString();
request.setAttribute(name, value);
}
//���������ǷǼ��ַ���������ͼƬ����Ƶ����Ƶ�ȶ������ļ���
else{
//��ȡ�ϴ��ļ��� �ַ������֡�+1��ȥ����б�ܡ�
String filename = CommonServlet.getRandomFileName();
request.setAttribute(name, filename);
//��ȡ�ļ��ϴ���Ҫ�����·����upload�ļ�������ڡ�
String voicePath = voiceRootPath
+ request.getAttribute("username").hashCode();
String savedPath = request.getAttribute("username").hashCode() + "/" ;
File file = new File(voicePath);
if(!file.exists()){
file.mkdirs();
}
/*�������ṩ�ķ���ֱ��д���ļ��С�
* item.write(new File(path,filename));*/
//�յ�д�����յ��ļ��С�
// item.write(new File(photoPath,filename));
OutputStream out = new FileOutputStream(new File(voicePath,filename));
InputStream in = item.getInputStream();
int length = 0;
byte[] buf = new byte[1024];
String sql = "insert into t_kx_voices(email, filename, content_type, time, longitude, latitude, location, calling_number, called_number) values(?,?,?,?,?,?,?,?,?)";
if(connection == null){
connection = MyOpenconnection.getconnection();
}
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, request.getAttribute("username").toString());
preparedStatement.setString(2, savedPath + filename);
preparedStatement.setString(3, "amr/3gp");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
preparedStatement.setString(4, StringUtil.isNull(request.getAttribute("time").toString()) ? sdf.format(date) : request.getAttribute("time").toString());
if(!StringUtil.isNull(request.getAttribute("longitude").toString())){
preparedStatement.setDouble(5, Double.parseDouble(request.getAttribute("longitude").toString()));
preparedStatement.setDouble(6, Double.parseDouble(request.getAttribute("latitude").toString()));
}else{
preparedStatement.setDouble(5, 0);
preparedStatement.setDouble(6, 0);
}
preparedStatement.setString(7, new String(request.getAttribute("address").toString().getBytes(
"iso-8859-1"), "utf-8"));
preparedStatement.setString(8, StringUtil.isNull(request.getAttribute("call").toString()) ? "δ֪" : request.getAttribute("call").toString());
preparedStatement.setString(9, StringUtil.isNull(request.getAttribute("called").toString()) ? "δ֪" : request.getAttribute("called").toString());
preparedStatement.execute();
response.getWriter().println("ok");
while((length = in.read(buf))!=-1){
out.write(buf,0,length);
}
in.close();
out.close();
}
}
}
catch (Exception e)
{
e.printStackTrace();
MyOpenconnection.closeConnection(connection);
response.getWriter().println(e.getMessage());
}finally{
MyOpenconnection.closeConnection(connection);
}
}
}