Unggah file sangat umum dalam aplikasi web. Sekarang saya akan memperkenalkan unggahan file berdasarkan servlet. Unggahan file berdasarkan struts2 dapat dilihat:
Kode sisi halaman:
<%@ page language = "java" import = "java.util.*" pageEncoding = "gbk"%> <! Doctype html public "-// w3c // dtd html 4.01 transisi // en"> <html> <head> <title> <title> </title </title> </head> <"form1 =" on "on" on " on_submit () "action =" registerservlet "metode =" post "enctype =" multipart /form-data "> <input type =" text "name =" uname1 "id =" password " /> <input type =" Text "name =" uname2 "ID =" uname2 " /<input type =" kata sandi "" kata sandi "" kata sandi "" kata sandi = "kata sandi" kata sandi = "kata sandi =" kata sandi = "kata sandi" kata sandi = "kata sandi" kata sandi = "kata sandi" kata sandi = "kata sandi" " id = "kata sandi"/> <input type = "Radio" value = "Male" checked = "checked" name = "sex"/> jantan <input type = "radio" value = "betina" name = "sex"/> female <input type = "Text" name = "email" value = "" id = "login"/<br/ <br/> <br/> <input "input =" "name =" "NODE" "/<br/> <br/> <input" name = "" name = "" NODE ""/<br/> <br/> <input "name =" "name" "name" "name" "name =" ID "nead =" name = "ID =" ID = "ID" ID = "ID" ID = " type = "kirim" name = "kirim" value = "Complete Registration"/> </form> </body> </html>
Satu hal yang perlu diperhatikan di sini adalah formulir yang diunggah oleh file harus enctype = "multipart/form-data"; Di sini kita berinteraksi langsung dengan latar belakang tanpa interaksi AJAX. Jika Anda perlu menggunakan AJAX, Anda dapat melihat: http://www.cnblogs.com/shenliang123/category/372520.html
Mari kita terus melihat implementasi kode Servlet:
Paket com.xidian.bbs.servlet; impor java.io.ioexception; impor java.io.printwriter; impor java.net.inetaddress; import java.sql.connection; impor java.sql.results; javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletResponse; import javax.servlet.jsp.jspfactory; impor javax.servlet; comspsmart.upload.*; import com.xidian.bbs.bean.bean; impor com.xidian.bbs.bean.registerbean; import com.xidian.bbs.util.dbaccess; impor com.xidian.bbs.util.ipTimestamp; @suppresswarnings ("serial") DoGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setContentType ("Text/html"); response.setcharacterencoding ("GBK"); request.setcharacterencoding ("GBK"); Smartupload Smart = SmartUpload baru (); Coba {// pagecontext adalah objek JSP bawaan. Itu tidak dapat digunakan secara langsung di Servlet, dan beberapa pemrosesan diperlukan. Jspfactory _jspxfactory = null; Pagecontext pageContext = null; _jspxfactory = jspfactory.getDefaultFactory (); pagecontext = _jspxfactory.getPageContext (ini, permintaan, respons, "", true, 8192, true); smart.initialize (pageContext); // inisialisasi operasi unggahan smart.upload (); Iptimestamp its = iptimestamp baru (inetaddress.getLocalhost (). GetHostAddress ()); // request.getremoteAddr () Mendapat alamat IP pengguna // System.out.println ("IP diperoleh adalah"+inetaddress.getlocalhost (). Gethost // Jika Anda ingin mengimplementasikan unggahan file batch, Anda hanya perlu menggunakan loop untuk loop dan mengubah 0 di getFile (0) ke i ke string ext = smart.getFiles (). GetFile (0) .getFileExt (); // Ini adalah ekstensi untuk mendapatkan file, getFile (0) adalah satu -satunya unggahan file string name. //System.out.println(" nama file yang diperoleh adalah "+fileName); //this.getSerVletContext().getRealpath("/ ") untuk mendapatkan direktori tomcat, ditempatkan di folder unggahan. java.io.file.separator adalah operasi yang aman // string realpath = ""; //this.getSerVletContext().getRealPath("/")+ smart.getFiles (). getFile (0) .saveas ("/Headupload"+java.io.file.separator+fileName); String realPath = "Headupload/"+FileName+""; // // Karena formulir formulir sebelumnya telah dienkapsulasi, kami tidak dapat hanya menggunakan request.getParameter () untuk mendapatkan parameter formulir string uname1 = smart.getRequest (). GetParameter ("uname1"); // nama panggilan string upass1 = smart.getRequest (). GetParameter ("password1"); String sex = smart.getRequest (). GetParameter ("sex"); String uname2 = smart.getRequest (). GetParameter ("uname2"); // Username String Email = Smart.getRequest (). GetParameter ("Email"); Printwriter out = response.getWriter (); // Berikut ini adalah operasi lapisan kegigihan, dihilangkan. . . . . . . . . . } Protected void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {doGet (permintaan, respons); }}IP+Timestamp Class IPTIMESTAMP yang digunakan di atas mengganti nama file:
Dalam mengunggah file dan operasi lain, untuk mencegah nama file dari yang bertentangan, kami akan melakukan operasi penggantian nama. Berikut adalah penamaan yang mengimplementasikan IP+ Timestamps:
Saya baru saja mengunggah kodenya, tidak ada yang bisa dikatakan, implementasinya cukup sederhana, tetapi praktis
Paket com.xidian.bbs.util; import java.text.simpledateFormat; impor java.util.date; import java.util.random; kelas publik iptimestamp {private SimplateFormat sim = null; // digunakan untuk mendapatkan waktu string pribadi ip = null; iptimestamp publik () {} public iptimestamp (string ip) {this.ip = ip; } public String getIptiMerAnd () {StringBuffer SBF = New StringBuffer (); if (this.ip! = null) {string a [] = this.ip.split ("//."); // Pisahkan alamat IP sesuai dengan titik, tetapi intinya harus diloloskan untuk (int i = 0; i <a.length; i ++) {sbf.append (this.addzero (a [i], 3)); // Memanggil metode pelengkap nol, dan setiap IP dengan kurang dari tiga digit secara otomatis ditambah dengan tiga digit} sbf.append (this.getTimestamp ()); // Gunakan ini untuk memanggil metode eksternal acak acak = acak baru (); // Membuat nomor acak untuk (int i = 0; i <3; i ++) {// Membuat nomor acak tiga digit sbf.append (random.nextint (10)); // Setiap nomor acak tidak melebihi 10}} return sbf.toString (); } @SuppressWarnings ("tidak digunakan") string private getDate () {// Mengenai tanggal dan waktu this.sim = new SimpleDateFormat ("yyyy-mm-dd hh: mm: ss.sss"); kembalikan this.sim.format (tanggal baru ()); } private string getTimestamp () {// return timestamp this.sim = new SimpleDeFormat ("yyyymmddhhmmsssss"); kembalikan this.sim.format (tanggal baru ()); } private string addZero (string str string, int len) {// metode pelengkap nol otomatis, parameter adalah string yang ditentukan dan panjang stringBuffer s = stringBuffer baru (); S. Laporan (str); while (s.length () <len) {s.insert (0, "0"); // Lengkapi operasi pelengkap nol pada posisi nol} return s.tostring (); } // uji public static void main (string [] ary) {iptimestamp iptimestamp = iptimestamp baru ("172.168.3.222"); // memanggil konstruktor dengan parameter system.out.println (iptimestamp.getIptiMerand ()); }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.