下载地址:http://download.csdn.net/detail/b275518834/7731671 工程编码:GBK 调通需要设置 RecordDialog类中的参数--- 服务器上传地址 uploadServerUrl 服务器下载播放地址 downloadServerUrl--- FileHelper 文件下载工具类 OnStateListener 接口-状态回调 RecordDialog 录音对话框 RecordManger 录音功能类 TalkNetManager 网络会话对话框 UploadUtil 文件上传工具类
效果图:客服端
录音上传核心代码
package com.im.util;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.Locale;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.SoundPool;
import android.os.AsyncTask;
import android.os.Environment;
import android.text.format.DateFormat;
public class TalkNetManager {
/** 录音管理类 */
private RecordManger recordManger = new RecordManger();
private Context context;
/** 下载文件服务器地址 */
private String downloadFileServerUrl;
/** 下载文件服务器地址 */
private String uploadFileServerUrl;
private OnStateListener uploadFileStateListener;
private OnStateListener downloadFileFileStateListener;
/** 启动录音不进行网络上传 */
public void startRecord() {
try {
recordManger.startRecordCreateFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/** 停止录音 */
public File stopRecord() {
return recordManger.stopRecord();// 停止录音
}
/** 停止录音后上传 */
public File stopRecordAndUpload() {
File file = recordManger.stopRecord();// 停止录音
if (file == null || !file.exists() || file.length() == 0) {
if (uploadFileStateListener != null)
uploadFileStateListener.onState(-1, "文件不存在或已经损坏");
return null;
}
new UpLoadecordFile().execute();// 调用异步任务
return recordManger.getFile();
}
/** 异步任务-录音上传 */
public class UpLoadecordFile extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... parameters) {
// TODO Auto-generated method stub11
return UploadUtil.uploadFile(recordManger.getFile(),
uploadFileServerUrl);
}
@Override
protected void onPostExecute(String result) {
if (result == null) {
if (uploadFileStateListener != null)
uploadFileStateListener.onState(-2, "上传文件失败");
return;
}
if (result != null)
if (uploadFileStateListener != null)
uploadFileStateListener.onState(0, "上传文件成功");
}
}
/** 下载后播放 */
public void downloadFileAndPlay(String uploadFilename) {
new DownloadRecordFile().execute(uploadFilename);
}
/** 异步任务-下载后播放 */
public class DownloadRecordFile extends AsyncTask<String, Integer, File> {
@Override
protected File doInBackground(String... parameters) {
// TODO Auto-generated method stub11
try {
String filename = new DateFormat().format("yyyyMMdd_HHmmss",
Calendar.getInstance(Locale.CHINA)) + ".amr";
return FileHelper.DownloadFromUrlToData(downloadFileServerUrl
+ parameters[0], filename, context);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(File result) {
if (result == null || !result.exists() || result.length() == 0) {
if (downloadFileFileStateListener != null) {
downloadFileFileStateListener.onState(-1, "下载文件失败");
return;
}
}
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
// TODO Auto-generated method stub
mediaPlayer.release();
}
});
try {
mediaPlayer.setDataSource(result.getPath());
mediaPlayer.prepare();
mediaPlayer.start();
if (downloadFileFileStateListener != null) {
downloadFileFileStateListener.onState(0, "成功");
return;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public RecordManger getRecordManger() {
return recordManger;
}
public void setRecordManger(RecordManger recordManger) {
this.recordManger = recordManger;
}
public Context getContext() {
return context;
}
public void setContext(Context context) {
this.context = context;
}
public void setDownloadFileServerUrl(String downloadFileServerUrl) {
this.downloadFileServerUrl = downloadFileServerUrl;
}
public String getUploadFileServerUrl() {
return uploadFileServerUrl;
}
public void setUploadFileServerUrl(String uploadFileServerUrl) {
this.uploadFileServerUrl = uploadFileServerUrl;
}
public OnStateListener getUploadFileStateListener() {
return uploadFileStateListener;
}
public void setUploadFileStateListener(
OnStateListener uploadFileStateListener) {
this.uploadFileStateListener = uploadFileStateListener;
}
public OnStateListener getDownloadFileFileStateListener() {
return downloadFileFileStateListener;
}
public void setDownloadFileFileStateListener(
OnStateListener downloadFileFileStateListener) {
this.downloadFileFileStateListener = downloadFileFileStateListener;
}
public String getDownloadFileServerUrl() {
return downloadFileServerUrl;
}
}
服务器端
服务器端上传代码
package com.project3gabs.action;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.ServletResponse;
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.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet
{
protected void service(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
System.out.println("服务器发现上传文件");
request.setCharacterEncoding("UTF-8");
if(request.getHeader("user-agent")!=null&&(request.getHeader("user-agent").toLowerCase().indexOf("mozilla")!=-1))
{
System.out.println("访问端-PC");
}else
{
System.out.println("访问端-手机");
}
// try {
// request.setCharacterEncoding("UTF-8"); // 设置处理请求参数的编码格式
// response.setContentType("text/html;charset=UTF-8"); // 设置Content-Type字段值
// PrintWriter out = response.getWriter();
// System.out.println("附加信息"+URLEncoder.encode(request.getParameter("msg"),"UTF-8"));
//
// } catch (Exception e1) {
// // TODO Auto-generated catch block
// e1.printStackTrace();
// }
try
{
// 下面的代码开始使用Commons-UploadFile组件处理上传的文件数据
FileItemFactory factory = new DiskFileItemFactory(); // 建立FileItemFactory对象
ServletFileUpload upload = new ServletFileUpload(factory);
// 分析请求,并得到上传文件的FileItem对象
List<FileItem> items = upload.parseRequest(request);
// 从web.xml文件中的参数中得到上传文件的路径
String uploadPath = this.getServletContext().getRealPath("/")+"\\uploadfile\\";
System.out.println(uploadPath);
File file = new File(uploadPath);
if (!file.exists())
{
file.mkdir();
}
String filename = null; // 上传文件保存到服务器的文件名
InputStream is = null; // 当前上传文件的InputStream对象
// 循环处理上传文件
for (FileItem item : items)
{
// 处理普通的表单域
if (item.isFormField())
{
try {
System.out.println(item.getFieldName()+item.getString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if (item.getFieldName().equals("filename"))
{
// 如果新文件不为空,将其保存在filename中
if (!item.getString().equals(""))
filename = item.getString("UTF-8");
System.out.println("filename="+filename.replace("\\\\", "\\"));
}
}
// 处理上传文件
else if (item.getName() != null && !item.getName().equals(""))
{
// 从客户端发送过来的上传文件路径中截取文件名
filename = item.getName().substring(
item.getName().lastIndexOf("\\") + 1);
is = item.getInputStream(); // 得到上传文件的InputStream对象
}
}
// 将路径和上传文件名组合成完整的服务端路径
filename = uploadPath + filename;
System.out.println("filename="+filename);
// 如果服务器已经存在和上传文件同名的文件,则输出提示信息
if (new File(filename).exists())
{
new File(filename).delete();
}
// 开始上传文件
if (!filename.equals(""))
{
// 用FileOutputStream打开服务端的上传文件
FileOutputStream fos = new FileOutputStream(filename);
byte[] buffer = new byte[8192]; // 每次读8K字节
int count = 0;
// 开始读取上传文件的字节,并将其输出到服务端的上传文件输出流中
while ((count = is.read(buffer)) > 0)
{
fos.write(buffer, 0, count); // 向服务端文件写入字节流
}
fos.close(); // 关闭FileOutputStream对象
is.close(); // InputStream对象
System.out.println("文件上传成功!");
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
服务器端下载代码
package com.project3gabs.action;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;
public class DownloadFile extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
javax.servlet.ServletOutputStream out = response.getOutputStream();
String filepath = request.getRealPath("/") + "uploadfile/";
String filename = new String(request.getParameter("filename").getBytes(
"ISO8859-1"), "UTF-8").toString();
//String filename = java.net.URLDecoder.decode(request.getParameter("filename"));
System.out.println("DownloadFile filepath:" + filepath);
System.out.println("DownloadFile filename:" + filename);
java.io.File file = new java.io.File(filepath + filename);
if (!file.exists()) {
System.out.println(file.getAbsolutePath() + " 文件不存在!");
return;
}
// 读取文件流
java.io.FileInputStream fileInputStream = new java.io.FileInputStream(
file);
// 下载文件
// 设置响应头和下载保存的文件名
if (filename != null && filename.length() > 0) {
response.setContentType("application/x-msdownload");
response
.setHeader("Content-Disposition", "attachment; filename="
+ new String(filename.getBytes("gb2312"),
"iso8859-1") + "");
if (fileInputStream != null) {
int filelen = fileInputStream.available();
// 文件太大时内存不能一次读出,要循环
byte a[] = new byte[filelen];
fileInputStream.read(a);
out.write(a);
}
fileInputStream.close();
out.close();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out
.println("<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass().getName());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}
下载地址:http://download.csdn.net/detail/b275518834/7731671