大文件上传 解决方案
场景:java 大文件上传?解决方案
java 大文件上传????????????
我想在java中实现大文件的上传(大概500M),
自己写的上传小一点文件还行,大一点的就崩溃了!!!
有没有这方面的例子????
不胜感激!!!!!!!!!!!
------解决方案--------------------
设置好缓冲500M应该是能承受的喵~~``
不知道楼主怎么实现的...
------解决方案--------------------
500M不是个小数目,能上传也很慢把
------解决方案--------------------
这么大的文件,晕哦,客户端提交数据,肯定全部都会缓存到你的服务器上来,你服务器内存不够肯定死了撒,呵呵,这么大的文件用其他方式吧,边读边写。用web上传它是一并传上来的,你搞不定的。
------解决方案--------------------
用apache上传组件吧
------解决方案--------------------
我这有个例子,没写注释
java 大文件上传????????????
我想在java中实现大文件的上传(大概500M),
自己写的上传小一点文件还行,大一点的就崩溃了!!!
有没有这方面的例子????
不胜感激!!!!!!!!!!!
------解决方案--------------------
设置好缓冲500M应该是能承受的喵~~``
不知道楼主怎么实现的...
------解决方案--------------------
500M不是个小数目,能上传也很慢把
------解决方案--------------------
这么大的文件,晕哦,客户端提交数据,肯定全部都会缓存到你的服务器上来,你服务器内存不够肯定死了撒,呵呵,这么大的文件用其他方式吧,边读边写。用web上传它是一并传上来的,你搞不定的。
------解决方案--------------------
用apache上传组件吧
------解决方案--------------------
我这有个例子,没写注释
- Java code
package com.fuyou; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; import java.util.List; 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.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class Fileupload extends HttpServlet { /** * Constructor of the object. */ public Fileupload() { super(); } /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request * the request send by the client to the server * @param response * the response send by the server to the client * @throws ServletException * if an error occurred * @throws IOException * if an error occurred */ public void doGet(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()); out.println(", using the GET method"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to * post. * * @param request * the request send by the client to the server * @param response * the response send by the server to the client * @throws ServletException * if an error occurred * @throws IOException * if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("requestCo"+"=="+request.getContentType()); response.setContentType("text/html;charset=gb2312"); PrintWriter out = response.getWriter(); // 设置保存的文件的目录 String uploadDir = getServletContext().getRealPath("/upload"); System.out.println(uploadDir); if (uploadDir == null) { out.println("无法访问存储目录!"); return; } File fUploadDir = new File(uploadDir); if (!fUploadDir.exists()) { if(!fUploadDir.mkdir()){ out.println("无法创建存储目录!"); return; } } if (!ServletFileUpload.isMultipartContent(request)) { out.println("只能外理mul的类型的数据"); return; } FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload fu = new ServletFileUpload(factory);//关键类 fu.setSizeMax(1024 * 1024 * 400); // FileItemFactory factory = new DiskFileItemFactory(); DiskFileItemFactory s = new DiskFileItemFactory();//设置临时文件最大值,如果大于这个值,就建一临时文件 s.setSizeThreshold(1024*1024); fu.setHeaderEncoding("gb2312"); List fileItem = null; try { fileItem = fu.parseRequest(request); } catch (FileUploadException e) { out.println("解析出错了"); e.printStackTrace(out); return; } Iterator i = fileItem.iterator(); while (i.hasNext()) { FileItem fi = (FileItem) i.next(); if (fi.isFormField()) { String content = fi.getString("gb2312"); String fieldName = fi.getFieldName(); System.out.println(fieldName+content); } else { String pathSrc = fi.getName(); if (pathSrc.trim().equals("")) { continue; } int start = pathSrc.lastIndexOf("\\"); String fileName = pathSrc.substring(start + 1); File pathDest = new File(uploadDir, fileName); try { fi.write(pathDest); String fieldName = fi.getFieldName(); request.setAttribute(fileName, fileName); } catch (Exception e) { out.println("存储文件出现问题"); e.printStackTrace(out); return; }finally{ fi.delete(); } } } } /** * Initialization of the servlet. <br> * * @throws ServletException * if an error occurs */ public void init() throws ServletException { // Put your code here } }
------解决方案--------------------
如果你不使用插件,那么速度会慢的惊人。当然,上传是可以的。
你所谓的崩溃是你在内存处理了所有的上传数据,你应该把他们保存到临时文件里,而不是全部在内存处理
------解决方案--------------------
你上传崩溃是你的服务器不行
------解决方案--------------------
建议用applet或ftp
------解决方案--------------------
500M?
用fileupload的吧
------解决方案--------------------
smartUpload或者fileupload插件都可以的
smartUpload就是为了实现文件上传功能的