การอัปโหลดไฟล์เป็นเรื่องธรรมดามากในเว็บแอปพลิเคชัน ตอนนี้ฉันจะแนะนำการอัปโหลดไฟล์ตาม Servlet สามารถดูการอัปโหลดไฟล์ตาม Struts2 ได้:
รหัสด้านข้าง:
<%@ page language = "java" import = "java.util.*" pageencoding = "gbk"%> <! doctype html สาธารณะ "-// w3c // dtd html 4.01 transitional // en"> <html> on_submit () "action =" registerServlet "method =" post "enctype =" multipart /form-data "> <input type =" text "name =" Uname1 "id =" รหัสผ่าน " /> <อินพุตประเภท =" text "name =" uname2 "id =" uname2 " /> < id = "รหัสผ่าน"/> <อินพุต type = "วิทยุ" value = "male" ตรวจสอบ = "ตรวจสอบ" name = "sex"/> male <input type = "Radio" value = "female" name = "sex"/> ผู้หญิง <อินพุต type = "text" name = "email" value = "" id = "login" value = "การลงทะเบียนเสร็จสมบูรณ์"/> </form> </body> </html>
สิ่งหนึ่งที่ควรทราบที่นี่คือแบบฟอร์มที่อัปโหลดโดยไฟล์ต้องเป็น enctype = "multipart/form-data"; ที่นี่เราโต้ตอบโดยตรงกับพื้นหลังโดยไม่ต้องมีปฏิสัมพันธ์กับ AJAX หากคุณต้องการใช้ AJAX คุณจะเห็น: http://www.cnblogs.com/shenliang123/category/372520.html
ลองดูการใช้งานรหัสของ Servlet ต่อไป:
แพ็คเกจ com.xidian.bbs.servlet; นำเข้า java.io.ioexception; นำเข้า java.io.printwriter; นำเข้า java.net.inetaddress; นำเข้า java.sql.connection; นำเข้า java.sql.resultset; javax.servlet.http.httpservlet; นำเข้า javax.servlet.http.httpservletrequest นำเข้า javax.servlet.http.httpservletResponse; นำเข้า Javax.servlet.jsp.jspfactory; com.jspsmart.upload.*; นำเข้า com.xidian.bbs.bean.bean; นำเข้า com.xidian.bbs.bean.registerbean; นำเข้า com.xidian.bbs.util.dbaccess; นำเข้า com.xidian.bbs.util.iptimestampress; โมฆะ doget (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {response.setContentType ("text/html"); Response.Setcharacterencoding ("GBK"); request.Setcharacterencoding ("GBK"); smartUpload smart = new smartUpload (); ลอง {// PageContext เป็นวัตถุในตัวของ JSP ไม่สามารถใช้โดยตรงใน servlet และจำเป็นต้องมีการประมวลผลบางอย่าง jspfactory _jspxfactory = null; pageContext pageContext = null; _jspxFactory = jspfactory.getDefaultFactory (); pageContext = _jspxfactory.getPageContext (นี่, คำขอ, การตอบสนอง, "", จริง, 8192, จริง); smart.initialize (pageContext); // เริ่มต้นการดำเนินการอัปโหลด smart.upload (); iptimestamp มัน = new iptimestamp (inetaddress.getLocalhost (). getHostaddress ()); // request.getRemoteaddr () ได้รับที่อยู่ IP ของผู้ใช้ // System.out.println ("IP ได้รับคือ" // หากคุณต้องการใช้การอัปโหลดแบบแบทช์คุณเพียงแค่ใช้ A for for loop และเปลี่ยน 0 ใน getFile (0) เพื่อ i to String ext = smart.getFiles (). getFile (0) .getFileExt (); // นี่คือส่วนขยายที่จะได้รับไฟล์ //system.out.println(" ชื่อไฟล์ที่ได้รับคือ "+ชื่อไฟล์); //this.getServletContext().getRealPath("/ ") เพื่อรับไดเรกทอรี Tomcat จะถูกวางไว้ในโฟลเดอร์อัปโหลด java.io.file.separator เป็นการดำเนินการที่ปลอดภัย // String realPath = ""; //this.getServletContext().getRealPath("/") smart.getFiles (). getFile (0) .Saveas ("/headupload"+java.io.file.Separator+ชื่อไฟล์); string realPath = "headupload/"+filename+""; // // เนื่องจากแบบฟอร์มก่อนหน้านี้ได้รับการห่อหุ้มเราไม่สามารถใช้ request.getParameter () เพื่อรับพารามิเตอร์ฟอร์มสตริง uname1 = smart.getRequest (). getParameter ("Uname1"); // ชื่อเล่นสตริง upass1 = smart.getRequest (). getParameter ("รหัสผ่าน 1"); String sex = smart.getRequest (). getParameter ("เพศ"); uname2 = smart.getRequest (). getParameter ("uname2"); // username string email = smart.getRequest (). getParameter ("อีเมล"); PrintWriter out = response.getWriter (); // ต่อไปนี้คือการดำเนินการเลเยอร์การคงอยู่ถูกละเว้น - - - - - - - - - } การป้องกันโมฆะ dopost (คำขอ httpservletrequest, การตอบสนอง httpservletResponse) พ่น servletexception, ioexception {doget (คำขอ, การตอบสนอง); -iptimestamp คลาส IP+timestamp ที่ใช้ด้านบนเปลี่ยนชื่อไฟล์:
ในการอัปโหลดไฟล์และการดำเนินการอื่น ๆ เพื่อป้องกันไม่ให้ชื่อไฟล์ขัดแย้งกันเราจะทำการเปลี่ยนชื่อ นี่คือการตั้งชื่อที่ใช้ IP+ timestamps:
ฉันเพิ่งอัปโหลดรหัสไม่มีอะไรจะพูดการใช้งานนั้นค่อนข้างง่าย แต่ใช้งานได้จริง
แพ็คเกจ com.xidian.bbs.util; นำเข้า java.text.simpledateFormat; นำเข้า java.util.date; นำเข้า java.util.random; คลาสสาธารณะ iptimestamp {ส่วนตัว SimpledateFormat Sim = null; // ใช้เวลาส่วนตัว Ip = null; public iptimestamp () {} สาธารณะ iptimestamp (สตริง ip) {this.ip = ip; } สตริงสาธารณะ getIptimerand () {StringBuffer sbf = new StringBuffer (); if (this.ip! = null) {string a [] = this.ip.split ("//."); // แยกที่อยู่ IP ตามจุด แต่จุดจะต้องหลบหนีสำหรับ (int i = 0; i <a.length; i ++) {sbf.append (this.addzero (a [i], 3)); // การเรียกใช้วิธีการที่ไม่มีศูนย์และแต่ละ IP ที่มีตัวเลขน้อยกว่าสามหลักจะเสริมโดยอัตโนมัติเป็นสามหลัก} sbf.append (this.getTimestamp ()); // ใช้สิ่งนี้เพื่อเรียกวิธีการสุ่มวิธีการสุ่ม = new Random (); // การสร้างหมายเลขสุ่มสำหรับ (int i = 0; i <3; i ++) {// การสร้างหมายเลขสุ่มสามหลัก sbf.append (random.nextint (10)); // แต่ละหมายเลขสุ่มไม่เกิน 10}} ส่งคืน sbf.toString (); } @suppresswarnings ("ไม่ได้ใช้") สตริงส่วนตัว getDate () {// เกี่ยวกับวันที่และเวลา this.sim = ใหม่ simpledateFormat ("yyyy-mm-dd hh: mm: ss.sss"); ส่งคืน this.sim.format (วันที่ใหม่ ()); } สตริงส่วนตัว getTimestamp () {// ส่งคืน timestamp this.sim = new SimpledateFormat ("yyyymmddhhmmssssss"); ส่งคืน this.sim.format (วันที่ใหม่ ()); } สตริงส่วนตัว addzero (สตริง str, int len) {// วิธีการที่สมบูรณ์แบบศูนย์อัตโนมัติพารามิเตอร์คือสตริงที่ระบุและความยาวสตริงบัฟเฟอร์ s = new Stringbuffer (); S.Append (STR); ในขณะที่ (s.length () <len) {s.insert (0, "0"); // การดำเนินการที่สมบูรณ์แบบศูนย์ที่ตำแหน่งศูนย์} ส่งคืน s.toString (); } // ทดสอบโมฆะสาธารณะคงที่หลัก (สตริง [] ary) {iptimestamp iptimestamp = new iptimestamp ("172.168.3.222"); // การเรียกตัวสร้างด้วยพารามิเตอร์ system.out.println (iptimestamp.getiptimerand ()); -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น