This topic has
3
replies
on
1
page.
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
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
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
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
Email this Topic
Edit this Topic
Site Upgrade
Forums 7.1.8 was deployed Oct 26th. The release consists of minor fixes & a few enhancements.
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.