JSP-filopplasting og nedlasting
I dette eksemplet skal vi lรฆre om opplasting og nedlasting av en fil gjennom JSP.
Filinndata er svรฆrt viktige operasjoner. Her skal vi lese og skrive en fil ved hjelp av JSP.
JSP-filopplasting
- Vi kan laste opp alle filer ved hjelp av JSP.
- Det kan vรฆre en tekstfil, binรฆr fil, bildefil eller et hvilket som helst annet dokument.
- Her ved filopplasting vil kun POST-metoden brukes og ikke GET-metoden.
- Enctype-attributt bรธr settes til multipart/form-data.
Eksempel: Bruk av handling
I dette eksemplet laster vi opp en fil ved hjelp av IO-objekt
Action_file.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru File</title>
</head>
<body>
<a>Guru File Upload:</a>
Select file: <br />
<form action="action_file_upload.jsp" method="post"
enctype="multipart/form-data">
<input type="file" name="file" size="50" />
<br />
<input type="submit" value="Upload File" />
</form>
</body>
</html>
Action_file_upload.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ page import="java.io.*,java.util.*, javax.servlet.*" %>
<%@ page import="javax.servlet.http.*" %>
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.fileupload.disk.*" %>
<%@ page import="org.apache.commons.fileupload.servlet.*" %>
<%@ page import="org.apache.commons.io.output.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru File Upload</title>
</head>
<body>
<%
File file ;
int maxFileSize = 5000 * 1024;
int maxMemSize = 5000 * 1024;
String filePath = "E:/guru99/data";
String contentType = request.getContentType();
if ((contentType.indexOf("multipart/form-data") >= 0)) {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(maxMemSize);
factory.setRepository(new File("c:\\temp"));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax( maxFileSize );
try{
List fileItems = upload.parseRequest(request);
Iterator i = fileItems.iterator();
out.println("<html>");
out.println("<body>");
while ( i.hasNext () )
{
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () ) {
String fieldName = fi.getFieldName();
String fileName = fi.getName();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
file = new File( filePath + "yourFileName") ;
fi.write( file ) ;
out.println("Uploaded Filename: " + filePath + fileName + "<br>");
}
}
out.println("</body>");
out.println("</html>");
}catch(Exception ex) {
System.out.println(ex);
}
}else{
out.println("<html>");
out.println("<body>");
out.println("<p>No file uploaded</p>");
out.println("</body>");
out.println("</html>");
}
%>
</body>
</html>
Forklaring av koden:
Action_file.jsp
Kodelinje 12-18: Her lager vi skjema med filfelt, som vil laste opp filen til serveren og handlingen sendes til action_file_upload.jsp
Action_file_upload.jsp
Kodelinje 20: Her gir vi filbanen til en bestemt bane
Kodelinje 23-38: Her sjekker vi om innholdstypen er multipart/form-data. Hvis det er tilfelle, er innholdet av filtype, og det leses. Etter at filen er lest, blir den skrevet inn i den midlertidige filen, og deretter blir den midlertidige filen konvertert til hovedfilen.
Nรฅr du utfรธrer koden ovenfor, fรฅr du fรธlgende utgang
Utgang:
Vi laster opp fil ved รฅ bruke velg filknapp-alternativet og last opp fil-knappen vil laste opp filen til serveren til banen som er gitt.
Eksempel: Bruk av JSP-operasjoner
I dette eksemplet skal vi laste opp en fil ved hjelp av JSP-operasjoner. Vi vil ta et skjema som vil ha "last opp"-knapp og nรฅr du klikker pรฅ opplastingsknappen vil filen bli lastet opp.
Uploading_1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Uploading File</title>
</head>
<body>
File: <br />
<form action="guru_upload" method="post"
enctype="multipart/form-data">
<input type="file" name="guru_file" size="50" />
<br />
<input type="submit" value="Upload" />
</form>
</body>
</html>
Forklaring av koden:
Kodelinje 11-12: Her tar vi et skjema som har handling pรฅ servlet guru_upload som vil gรฅ gjennom en metode POST. Ogsรฅ her enctype vi dvs. attributt som spesifiserer hvordan skjemadata skal kodes og sendes til server og det brukes kun med POST-metoden. Her setter vi som multipart/form-data som er for filen (da data vil vรฆre store).
Kodelinje 13: Her spesifiserer vi guru_file element med type fil og gir stรธrrelse som 50.
Kodelinje 15: Dette er en innsendingstype-knapp med navnet "Last opp" pรฅ den som handlingsservlet vil bli kalt og forespรธrselen vil behandles til og filen vil bli lest og skrevet inn i servleten.
Guru_upload.java
package demotest;
import java.io.File;
import java.io.IOException;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class guru_upload extends HttpServlet {
private static final long serialVersionUID = 1L;
public guru_upload() {
super();
// TODO Auto-generated constructor stub
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if(ServletFileUpload.isMultipartContent(request)){
try {
List <FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for(FileItem item : multiparts){
if(!item.isFormField()){
String name = new File(item.getName()).getName();
item.write( new File("c:/guru/upload" + File.separator + name));
}
}
//File uploaded successfully
request.setAttribute("gurumessage", "File Uploaded Successfully");
} catch (Exception ex) {
request.setAttribute("gurumessage", "File Upload Failed due to " + ex);
}
}else{
request.setAttribute("gurumessage","No File found");
}
request.getRequestDispatcher("/result.jsp").forward(request, response);
}
}
Forklaring av koden:
Kodelinje 12-14: Her mรฅ vi importere org.apache.commons-biblioteket til konfigurasjonen av koden. Vi mรฅ importere filopplastingsklassen fra org.apache.commons-biblioteket.
Kodelinje 23: Her har vi doPost()-metoden, som vil bli kalt nรฅr vi sender POST-metoden i JSP, og den vil be om og svare pรฅ objekter som parametere
Kodelinje 26: Her lager vi et objekt av ServletFileUpload-klassen fra fileUpload-pakken fra org.apache.commons-biblioteket som vil sjekke om det er noen filobjekter i JSP. Hvis noen blir funnet, vil disse filobjektene bli tatt fra forespรธrselen.
Kodelinje 27-32: Vi vil iterere antall filer ved รฅ sjekke hvor mange filelementer som finnes i multiparts-objektet som er et listeobjekt (hvis vi laster opp mer enn รฉn fil) og lagre det i c:/guru/upload-mappen med filnavnet som er gitt . Vi skriver filen ved รฅ bruke skrivemetoden til filobjektet inn i mappen som er nevnt.
Kodelinje 34: Hvis det ikke er noe unntak, setter vi attributtet i forespรธrselen som gurumessage med verdien "File lastet opp".
Kodelinje 35-36: Hvis unntak oppstรฅr, mรฅ du angi melding om at "Filopplasting mislyktes"
Kodelinje 40: Hvis filen ikke ble funnet, mรฅ du angi meldingen som "Ingen fil funnet"
Kodelinje 42: Videresende forespรธrsel med requestdispatcher-objekt til result.jsp med forespรธrsels- og svarobjekter.
Result.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Result</title>
</head>
<body>
<% String msg = (String)request.getAttribute("message");
out.println(msg);
%>
</body>
</html>
Forklaring av koden:
Kodelinje 10: Her fรฅr vi attributtet fra forespรธrselsobjektet med verdi gurumessage til et strengobjekt.
Kodelinje 11: Her trykker vi den meldingen.
Nรฅr vi kjรธrer koden ovenfor fรฅr vi fรธlgende utgang
Utgang:
Vi fรฅr et skjema der det er felt for รฅ velge en fil fra katalogen. Nรฅr filen er valgt, mรฅ vi klikke pรฅ opplastingsknappen.
Nรฅr du klikker pรฅ opplastingsknappen, fรฅr vi meldingen om at filen er lastet opp.
I diagrammet nedenfor kan vi se at filen ble lastet opp i mappen c:/guru/upload.
Last ned JSP-fil
I dette eksemplet skal vi laste ned en fil fra en katalog ved รฅ klikke pรฅ knappen.
Laster ned_1.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Downloading Guru Example</title>
</head>
<body>
Guru Downloading File<a href="guru_download">Download here!!!</a>
</body>
</html>
Forklaring av koden:
Kodelinje 10: Her har vi gitt en lenke for รฅ laste ned en fil fra mappen c:/guru/upload ved รฅ bruke servlet guru_download .
Guru_download.java
package demotest;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class guru_download
*/
public class guru_download extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String gurufile = "test.txt";
String gurupath = "c:/guru/upload/";
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", "attachment; filename=\""
+ gurufile + "\"");
FileInputStream fileInputStream = new FileInputStream(gurupath
+ gurufile);
int i;
while ((i = fileInputStream.read()) != -1) {
out.write(i);
}
fileInputStream.close();
out.close();
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
Forklaring av koden:
Kodelinje 3-5: Her importerer vi FileInputStream , IO Exception og PrintWriter fra java.io-pakken.
Kodelinje 15: Vi definerer guru_download servlett som utvider HttpServlet.
Kodelinje 18: Som vi har definert en href, som vil vรฆre omsluttet av URL, sรฅ vil GET-metoden bli behandlet (doGet vil bli kalt i servlet) som ogsรฅ omslutter forespรธrsels- og svarobjekter.
Kodelinje 19-20: Vi setter innhold Skriv inn responsobjekt og fรฅ ogsรฅ writer-objekt fra respons.
Kodelinje 21-22: Definere en variabel som gurufil som verdi test.txt og gurupath som c:/guru/upload/
Kodelinje 23-25: Vi setter innholdstypen ved รฅ bruke responsobjekt og vi bruker setHeader-metoden som setter header inn i responsobjektet som filnavnet som er lastet opp.
Kodelinje 27-28: Vi lager FileInputStream der vi vil legge til gurupath+gurufile.
Kodelinje 31-33: Her har vi tatt en mens lรธkken som vil kjรธre til filen er lest, derfor har vi gitt betingelse som != -1. I denne tilstanden skriver vi med printwriter-objekt ut.
Nรฅr du utfรธrer koden ovenfor, fรฅr du fรธlgende utgang
Utgang:
Utgang:
Vi mรฅ klikke pรฅ downloading_1.jsp vi vil fรฅ en hyperkobling som "Last ned her". Nรฅr du klikker pรฅ denne hyperkoblingsfilen, vil den lastes ned til systemet.
Sammendrag
- Vi har lรฆrt om registreringsskjema for รฅ registrere deg i enhver sรธknad
- Lรฆrte mer om hvordan innloggings- og utloggingsskjemaene fungerer.
- Lรฆrte ogsรฅ om opplasting og nedlasting av en fil gjennom JSP.





