Muat naik fail JSP
JSP boleh memuat naik fail ke pelayan melalui borang HTML. Jenis fail boleh menjadi fail teks, fail binari, fail imej atau sebarang dokumen lain.
Buat borang muat naik fail
Seterusnya kami menggunakan teg HTML untuk membuat borang muat naik fail Berikut ialah perkara yang perlu diberi perhatian:
Borang borang kaedah atribut mesti ditetapkan kepada kaedah POST dan kaedah GET tidak boleh digunakan.
borang borang enctype atribut perlu ditetapkan kepada multipart/form-data.
borang borang tindakan atribut perlu ditetapkan kepada alamat fail jsp yang diserahkan ke latar belakang untuk muat naik fail. Contohnya, fail program uploadFile.jsp digunakan untuk memproses fail yang dimuat naik.
Memuat naik elemen fail memerlukan penggunaan teg <input .../> Jika anda perlu memuat naik berbilang fail, anda boleh menetapkan nama yang berbeza dalam teg <input .../>
Berikut ialah borang untuk memuat naik fail Contoh adalah seperti berikut:
<html> <head> <title>File Uploading Form</title> </head> <body> <h3>File Upload:</h3> Select a file to upload: <br /> <form action="UploadServlet" method="post" enctype="multipart/form-data"> <input type="file" name="file" size="50" /> <br /> <input type="submit" value="Upload File" /> </form> </body> </html>
Akses fail dalam penyemak imbas tempatan anda Antara muka paparan adalah seperti yang ditunjukkan di bawah. Selepas anda mengklik "Muat Naik Fail" akan muncul tetingkap untuk anda memilih fail untuk dimuat naik:
Skrip pemprosesan JSP Latar Belakang
Pertama kami menentukan fail untuk disimpan selepas memuat naik Di lokasi pada perkhidmatan, anda boleh menulis laluan dalam program anda, atau kami boleh menetapkan direktori tempat fail disimpan dengan menetapkan elemen konteks-param dalam fail konfigurasi web.xml , seperti yang ditunjukkan di bawah:
<web-app> .... <context-param> <description>文件上传地址</description> <param-name>file-upload</param-name> <param-value> c:\apache-tomcat-5.5.29\webapps\data\ </param-value> </context-param> .... </web-app>
Fail skrip berikut UploadFile.jsp boleh mengendalikan berbilang fail yang dimuat naik Sebelum menggunakan skrip ini, kita perlu memberi perhatian kepada perkara berikut:
- <. 🎜>Contoh berikut bergantung pada FileUpload, jadi anda perlu Memperkenalkan fail pakej
commons-fileupload.x.x.jar terbaharu ke dalam classpath. Alamat muat turun ialah: http://commons.apache.org/fileupload/.
- FileUpload bergantung pada Commons IO, jadi anda perlu memperkenalkan
commons-io-x.x.jar terbaharu ke dalam laluan kelas anda. Alamat muat turun ialah: http://commons.apache.org/io/.
- Apabila menguji contoh berikut, anda perlu memuat naik dan mengesahkan bahawa saiz fail yang dimuat naik adalah lebih kecil daripada saiz yang ditetapkan oleh pembolehubah
maxFileSize, jika tidak, fail tidak boleh berjaya dimuat naik.
- Pastikan anda telah mencipta direktori c:temp dan c:apache-tomcat-5.5.29webappsdata.
<%@ 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.*" %> <% File file ; int maxFileSize = 5000 * 1024; int maxMemSize = 5000 * 1024; ServletContext context = pageContext.getServletContext(); String filePath = context.getInitParameter("file-upload"); // 验证上传内容了类型 String contentType = request.getContentType(); if ((contentType.indexOf("multipart/form-data") >= 0)) { DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置内存中存储文件的最大值 factory.setSizeThreshold(maxMemSize); // 本地存储的数据大于 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("<head>"); out.println("<title>JSP File upload</title>"); out.println("</head>"); 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(); // 写入文件 if( fileName.lastIndexOf("\") >= 0 ){ file = new File( filePath , fileName.substring( fileName.lastIndexOf("\"))) ; }else{ file = new File( filePath , fileName.substring(fileName.lastIndexOf("\")+1)) ; } 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("<head>"); out.println("<title>Servlet upload</title>"); out.println("</head>"); out.println("<body>"); out.println("<p>No file uploaded</p>"); out.println("</body>"); out.println("</html>"); } %>Seterusnya biarkan kami mengakses
http://localhost:8080/UploadFile.htm melalui penyemak imbas, antara muka adalah seperti yang ditunjukkan di bawah dan muat naik fail:
Jika skrip JSP anda berjalan seperti biasa, fail akan dimuat naik ke c:apache-tomcat-5.5.29webappsdata Anda boleh membuka folder untuk melihat sama ada muat naik berjaya .