android OkHttp上传文件,selvelt服务端

最近项目需要一个文件上传的功能,之前服务端都是uploadFile第三方库去做,但是时常会有文件上传失败的请求(没办法上传失败就让用户再上传一次吧)。

但近日看了大牛鸿洋_的博客 http://blog.csdn.net/lmj623565791/article/details/47911083 Android OkHttp完全解析 是时候来了解OkHttp了

废弃了自己的数据请求的工具类,用了鸿洋封装过的OkHttp确实方便了很多,但是上传文件时好像不兼容selvet+uploadFile,想着反正原先的上传接口就有问题那就全换了吧

1.环境 Tomcat 7.0+

2. selvet3.0,网上怎么配置都有

以下代码,根据自己需求去改:

package com.farsunset.ichat.admin.action;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import com.farsunset.cim.nio.mutual.Message;
import com.farsunset.cim.nio.session.CIMSession;
import com.farsunset.cim.nio.session.DefaultSessionManager;
import com.farsunset.ichat.cim.dao.hibernate.MessageDaoHibernate;
import com.farsunset.ichat.cim.generator.MessageGenerator;
import com.farsunset.ichat.common.util.ContextHolder;
import com.farsunset.ichat.common.util.FileUtils;
import com.farsunset.ichat.common.util.ImageUtil;

@WebServlet(name = "ChatMessageServlet", urlPatterns = "/ChatMessageServlet")
@MultipartConfig
public class ChatMessageServlet extends HttpServlet {
	private String dir = null;
	private File folderFile = null;
	private ImageUtil imageUtil = null;
	private MessageDaoHibernate messageDaoHibernate;
	private DefaultSessionManager sessionManager;

	private MessageGenerator messageGenerator;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public ChatMessageServlet() {
		messageDaoHibernate = (MessageDaoHibernate) ContextHolder
				.getBean("messageDaoHibernate");
		sessionManager = DefaultSessionManager.getInstance();
		messageGenerator = new MessageGenerator();
	}

	/**
	 * 
	 * @see Servlet#init(ServletConfig)
	 */
	public void init(ServletConfig config) throws ServletException {
		dir = config.getServletContext().getRealPath("Chat");
		folderFile = new File(dir);
		folderFile.mkdirs();
		imageUtil = new ImageUtil();

	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
		String nowDateFormat = new SimpleDateFormat("yyyyMMdd")
				.format(new Date());
		String apath = dir + File.separator + nowDateFormat + File.separator;
		// 参数处理
		String sender = inputStream2String(req.getPart("sender")
				.getInputStream());
		String receiver = inputStream2String(req.getPart("receiver")
				.getInputStream());
		String uuid = inputStream2String(req.getPart("uuid").getInputStream());
		String type = inputStream2String(req.getPart("type").getInputStream());
		String title = inputStream2String(req.getPart("title").getInputStream());
		String fileType = inputStream2String(req.getPart("fileType")
				.getInputStream());
		String format = inputStream2String(req.getPart("format")
				.getInputStream());
		
		// 获取上传的文件集合
		Collection<Part> parts = req.getParts();

		for (Part part : parts) {// 循环处理上传的文件
			// 文件处理
			if (part.getName().equals("image")) {

				// 文件处理
				String header = part.getHeader("content-disposition");
				// 获取文件名
				String filePath = apath + "image" + File.separator
						+ getFileName(header);
				FileUtils.createFile(filePath);
				// 写入指定文件
				part.write(filePath);
				// 生成缩略图
				imageUtil.thumbnailImage(filePath, 100, 150);

				sentFileToUser(sender, receiver, uuid, type, title, fileType,
						format, filePath);
			} else if (part.getName().equals("voice")) {
				// 文件处理
				String header = part.getHeader("content-disposition");
				// 获取文件名
				String filePath = apath + "voice" + File.separator
						+ getFileName(header);
				FileUtils.createFile(filePath);
				// 写入指定文件
				part.write(filePath);
				sentFileToUser(sender, receiver, uuid, type, title, fileType,
						format, filePath);
			}

		}

	}

	private void sentFileToUser(String sender, String receiver, String uuid,
			String type, String title, String fileType, String format,
			String filePath) {
		// 生成消息
		Message msg = new Message();
		msg.setFileUrl(filePath);
		msg.setFileType(fileType);
		msg.setFormat(format);
		msg.setReceiver(receiver);
		msg.setSender(sender);
		msg.setTitle(title);
		msg.setType(type);
		msg.setUuid(uuid);
		messageDaoHibernate.saveMessage(messageGenerator.toIMMessage(msg));
		CIMSession session = sessionManager.getSession(receiver);

		if (session != null && session.isConnected()) {
			session.write(msg);
		}
	}

	public String inputStream2String(InputStream in) throws IOException {
		StringBuffer out = new StringBuffer();
		byte[] b = new byte[1024];
		for (int n; (n = in.read(b)) != -1;) {
			out.append(new String(b, 0, n));
		}
		return out.toString();
	}

	public String getFileName(String header) {

		String[] tempArr1 = header.split(";");

		String[] tempArr2 = tempArr1[2].split("=");

		String fileName = tempArr2[1].substring(
				tempArr2[1].lastIndexOf("\\") + 1).replaceAll("\"", "");
		return fileName;
	}
}


  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值