2011-03-21 99 views
0

我对servlet技术很陌生。我想从本地文件系统(即客户机)上传文件到Tomcat上运行的服务器。有人可以告诉我如何做到这一点。如何使用servlet将文件上传到服务器?

我使用html输入元素类型file<input type="file"...>)和form action属性将数据发布到servlet。

plz帮助我。

回答

1

这是不包含在Servlet API的,但可通过http://commons.apache.org/fileupload/

基本上,这使用包括IO流了servlet API在处理上载流数据 - 我认为有计划,包括文件上传功能了在最新版本的API中,该框一直在为我工作。

1

传递从JSP文件或使用文件上传组件的HTML。并在表单动作中设置servlet.java。

Servlet.java

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.sql.*; 

public class UploadServlet extends HttpServlet{ 
    public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { 
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 

    String saveFile=""; 
    String contentType = request.getContentType(); 
    if((contentType != null)&&(contentType.indexOf("multipart/form-data") >= 0)){ 
    DataInputStream in = new DataInputStream(request.getInputStream()); 
    int formDataLength = request.getContentLength(); 
    byte dataBytes[] = new byte[formDataLength]; 
    int byteRead = 0; 
    int totalBytesRead = 0; 
    while(totalBytesRead < formDataLength){ 
    byteRead = in.read(dataBytes, totalBytesRead,formDataLength); 
    totalBytesRead += byteRead; 
    } 
    String file = new String(dataBytes); 
    saveFile = file.substring(file.indexOf("filename=\"") + 10); 
    saveFile = saveFile.substring(0, saveFile.indexOf("\n")); 
    saveFile = saveFile.substring(saveFile.lastIndexOf("\\") + 1,saveFile.indexOf("\"")); 
    int lastIndex = contentType.lastIndexOf("="); 
    String boundary = contentType.substring(lastIndex + 1,contentType.length()); 
    int pos; 
    pos = file.indexOf("filename=\""); 
    pos = file.indexOf("\n", pos) + 1; 
    pos = file.indexOf("\n", pos) + 1; 
    pos = file.indexOf("\n", pos) + 1; 
    int boundaryLocation = file.indexOf(boundary, pos) - 4; 
    int startPos = ((file.substring(0, pos)).getBytes()).length; 
    int endPos = ((file.substring(0, boundaryLocation)).getBytes()).length; 
    File ff = new File(saveFile); 
    FileOutputStream fileOut = new FileOutputStream(ff); 
    fileOut.write(dataBytes, startPos, (endPos - startPos)); 
    fileOut.flush(); 
    fileOut.close(); 
    out.println("You have successfully upload the file:"+saveFile); 
    Connection connection = null; 
    String connectionURL = "jdbc:mysql://localhost:3306/test"; 
    ResultSet rs = null; 
    PreparedStatement psmnt = null; 
    FileInputStream fis; 
    try{ 
    Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    connection = DriverManager.getConnection(connectionURL, "root", "root"); 
    File f = new File(saveFile); 
    psmnt = connection.prepareStatement("insert into file(file_data) values(?)"); 
    fis = new FileInputStream(f); 
    psmnt.setBinaryStream(1, (InputStream)fis, (int)(f.length())); 
    int s = psmnt.executeUpdate(); 
    if(s>0){ 
    System.out.println("Uploaded successfully !"); 
    } 
    else{ 
    System.out.println("Error!"); 
    } 
    } 
    catch(Exception e){ 
     e.printStackTrace(); 
     } 
    } 
    } 
} 
相关问题