participate


Java Programming [Archive] - how to write a jsp to upload a file
<<   Back to Forum  |   Give us Feedback
This topic has 3 replies on 1 page.
damon_ho
Posts:3
Registered: 9/4/05
how to write a jsp to upload a file   
Sep 4, 2005 6:14 PM

 
how to write a jsp to upload a file. if i write a form that contain

<form name='file_upload' action='file_upload.jsp' method='post'>
<input type=file name='load_file_name'>
<input type=submit name='submit' value='submit'>
</form>

then, how to write file_upload.jsp to receive the file, e.g. file.txt
 
cllofty
Posts:35
Registered: 5/10/00
Re: how to write a jsp to upload a file   
Sep 4, 2005 7:27 PM (reply 1 of 3)  (In reply to original post )

 
To upload a file, you will need a webpage that contains a FORM with ENCTYPE set to "multipart/form-data" and contains a INPUT of type FILE. You will also need something to parse the multipart/form-data.

The basic form:
<FORM METHOD="POST" ENCTYPE="multipart/form-data" ACTION="fileupload.jsp">

<INPUT TYPE="FILE" NAME="UploadedFile">

</FORM>

As for parsing the multi-part-data, I recommend the MultipartParser from O'Reilly:

http://www.servlets.com/cos/

Hope this helps,
Chris
 
jesperdj
Posts:1,385
Registered: 6/10/03
Re: how to write a jsp to upload a file   
Sep 5, 2005 12:26 AM (reply 2 of 3)  (In reply to #1 )

 
No, do NOT use the O'Reilly stuff. It has a quirk in the license - if you want to use it for commercial purposes, you are required to buy an O'Reilly book.

Use Apache Jakarta Commons FileUpload instead:
http://jakarta.apache.org/commons/fileupload/
 
fun2oos
Posts:22
Registered: 9/15/05
Re: how to write a jsp to upload a file   
Nov 3, 2005 1:20 AM (reply 3 of 3)  (In reply to original post )

 
jsp file upload code (any type of file): (fileUpload.jsp)

 
<%@ page import="java.io.*,javax.servlet.http.HttpServletRequest,javax.servlet.ServletInputStream" %>
<%@ page import="java.io.FileWriter,java.io.IOException" %>
<%
	String savePath = "", filepath = "", filename = "";
	String contentType = "", fileData = "", strLocalFileName = "";
	int startPos = 0;
	int endPos = 0;
%>
<%!
	//copy specified number of bytes from main data buffer to temp data buffer
	void copyByte(byte [] fromBytes, byte [] toBytes, int start, int len)
	{
		for(int i=start;i<(start+len);i++)
		{
			toBytes[i - start] = fromBytes[i];
		}
	}
%>
<%
	int BOF = 0, EOF = 0;
	contentType = request.getContentType();
	out.println("<br>Content type is :: " +contentType);
	if ((contentType != null) && (contentType.indexOf("multipart/form-data") >= 0)) 
	{
		DataInputStream in = new DataInputStream(request.getInputStream());
		DataInputStream in1 = in;
		int formDataLength = request.getContentLength();
		byte dataBytes[] = new byte[formDataLength];
		int byteRead = 0;
		int totalBytesRead = 0;
		while (totalBytesRead < formDataLength)
		{	
			byteRead = in1.read(dataBytes, totalBytesRead, formDataLength);
			totalBytesRead += byteRead;
		}
		out.println("<br>totalBytesRead : " + totalBytesRead + "    :   formDataLength = " + formDataLength);
		
		//String file = new String(dataBytes); 
		//out.println("<br>File Contents:<br>////////////////////////////////////<br>" + file + "<br>////////////////////////////////<br>");
 
		byte[] line = new byte[128];
		if (totalBytesRead < 3)	
		{
		  return;	//exit if file length is not sufficiently large
		}
 
		String boundary = "";
		String s = "";
		int count = 0;		
		int pos = 0;
		
		//loop for extracting boundry of file
		//could also be extracted from request.getContentType()
		do
		{
			copyByte(dataBytes, line, count ,1);	//read 1 byte at a time
			count+=1;
			s = new String(line, 0, 1);
			fileData = fileData + s;
			pos = fileData.indexOf("Content-Disposition: form-data; name=\""); //set the file name
			if(pos != -1)
				endPos = pos;
		}while(pos == -1);
		boundary = fileData.substring(startPos, endPos);
 
		//loop for extracting filename
		startPos = endPos;
		do
		{
			copyByte(dataBytes, line, count ,1);	//read 1 byte at a time
			count+=1;
			s = new String(line, 0, 1);
			fileData = fileData + s;
			pos = fileData.indexOf("filename=\"", startPos); //set the file name
			if(pos != -1)
				startPos = pos;
		}while(pos == -1);					
		do
		{
			copyByte(dataBytes, line, count ,1);	//read 1 byte at a time
			count+=1;
			s = new String(line, 0, 1);
			fileData = fileData + s;
			pos = fileData.indexOf("Content-Type: ", startPos);
			if(pos != -1)
				endPos = pos;						
		}while(pos == -1);
		filename = fileData.substring(startPos + 10, endPos - 3);	//to eliminate " from start & end
		strLocalFileName = filename;
		int index = filename.lastIndexOf("\\");
		if(index != -1)
			filename = filename.substring(index + 1);
		else
			filename = filename;
		
		//loop for extracting ContentType
		boolean blnNewlnFlag = false;
		startPos = endPos;	//added length of "Content-Type: "
		do
		{
			copyByte(dataBytes, line, count ,1);	//read 1 byte at a time
			count+=1;
			s = new String(line, 0, 1);
			fileData = fileData + s;			
			pos = fileData.indexOf("\n", startPos);
			if(pos != -1)
			{
				if(blnNewlnFlag == true)
					endPos = pos;					
				else
				{
					blnNewlnFlag = true;
					pos = -1;
				}
			}
		}while(pos == -1);
		contentType = fileData.substring(startPos + 14, endPos);
		
		//loop for extracting actual file data (any type of file)
		startPos = count + 1;
		do
		{
			copyByte(dataBytes, line, count ,1);	//read 1 byte at a time
			count+=1;
			s = new String(line, 0, 1);
			fileData = fileData + s;
			pos = fileData.indexOf(boundary, startPos);	//check for end of file data i.e boundry value			
		}while(pos == -1);
		endPos = count - boundary.length();
		//file data extracted
 
		out.println("<br><br>0. Local File Name = " + strLocalFileName);
		out.println("<br><br>1. filename = " + filename);
		out.println("<br>2. contentType = " + contentType);
		out.println("<br>3. startPos = " + startPos);
		out.println("<br>4. endPos = " + endPos);
		out.println("<br>5. boundary = " + boundary);
 
		//create destination path & save file there
		String appPath = application.getRealPath("/");
		out.println("<br>appPath : " + appPath);
		String destFolder = appPath + "images/banner/";
		filename= destFolder + filename;
		FileOutputStream fileOut = new FileOutputStream(filename);
		fileOut.write(dataBytes, startPos, (endPos - startPos));
		fileOut.flush();
		fileOut.close();
		out.println("<br>File saved as >> " + filename);		
		//file saved at destination
		//out.println("<br>File data : <br><br>**************************<br>" + (new String(dataBytes,startPos, (endPos - startPos))) + "<br><br>**************************");
	}
	else
	{
		out.println("Error in uploading ");
	}
	
%>


supporting html file:

 
<form method="post" action="fileUpload.jsp" name="upform" enctype="multipart/form-data">
  <table width="60%" border="0" cellspacing="1" cellpadding="1" align="center" class="style1">
    <tr>
      <td align="left"><b>Select a file to upload :</b></td>
    </tr>
    <tr>
      <td align="left">
        <input type="file" name="uploadfile" size="50">
        </td>
    </tr>
    <tr>
      <td align="left">
		<input type="hidden" name="todo" value="upload">
        <input type="submit" name="Submit" value="Upload">
        <input type="reset" name="Reset" value="Cancel">
        </td>
    </tr>
  </table>  
</form>
</body>
</html>
 
This topic has 3 replies on 1 page.
Back to Forum
 
Read the Developer Forums Code of Conduct

Click to email this message Email this Topic

Edit this Topic
  
 
 
Forums Statistics
    Users Online : 28
  • Guests : 133

About Sun forums
  • Oracle Forums is a large collection of user generated discussions. It is here to help you ask questions, find answers, and participate in discussions.

    Check out our guide on Getting started with Oracle Forums for a full walkthrough of how to best leverage the benefits of this community.

Powered by Jive Forums