
设计思路:
form实现文件上传
内在也是通过form实现,
在Js中创建一个form 对象,点击按钮,触发事件(模拟form被点击),得到文件-》通过构造的form对象上传文件
前端代码:
后端代码:
package my; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItemIterator; import org.apache.commons.fileupload.FileItemStream; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.util.Streams; import org.json.JSONObject; / * Servlet implementation class FileUploadService */ @WebServlet("/FileUploadService") public class FileUploadService extends HttpServlet { //文件上传的临时目录 File tmpDir; @Override public void init() throws ServletException { File webRoot = new File(getServletContext().getRealPath("/")); tmpDir = new File(webRoot, "upload"); tmpDir.mkdirs(); //上传进来的文件存放在 WebRoot/upload/ 下 } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { JSONObject jresp = new JSONObject(); try { Object data = doUpload(request, response); jresp.put("error", 0); jresp.put("reason", "OK"); if(data != null) jresp.put("data", data); } catch (Exception e) { jresp.put("error", -1); jresp.put("reason", e.getMessage()); } response.setCharacterEncoding("UTF-8"); response.setContentType("text/plain"); PrintWriter out = response.getWriter(); out.write(jresp.toString(2)); out.close(); } private Object doUpload(HttpServletRequest request, HttpServletResponse response) throws Exception { boolean isMultipart = ServletFileUpload.isMultipartContent(request); if(!isMultipart) throw new Exception("请求编码必须为:multipart/form-data!"); request.setCharacterEncoding("utf-8"); // ServletFileUpload : commons包里提供的工具类 ServletFileUpload upload = new ServletFileUpload(); AfFileUploadInfo info = new AfFileUploadInfo(); FileItemIterator iter = upload.getItemIterator(request); while(iter.hasNext()) { //表单域 FileItemStream item = iter.next(); String fieldName = item.getFieldName(); InputStream fieldStream = item.openStream(); if(item.isFormField()) { // 普通表单域: 直接读取值 // 指的是,
package my; import java.io.File; public class AfFileUploadInfo { public String realName; //原始文件名 public String suffix; //后缀 public String tmpFileName; //服务器临时文件名 public File tmpFile; public long fileSize; //文件大小 }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/212661.html原文链接:https://javaforall.net
