android OkHttp上傳檔案,selvelt服務端
阿新 • • 發佈:2019-02-06
最近專案需要一個檔案上傳的功能,之前服務端都是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; } }