Secara umum, ada dua cara untuk mengunggah gambar. Salah satunya adalah menulis file gambar ke dalam database, dan yang lainnya adalah menyimpannya di direktori file server. File gambar yang ditulis ke database perlu dikonversi menjadi format aliran biner, menempati ruang basis data, dan cocok untuk penyimpanan sejumlah kecil gambar. Misalnya, beberapa ikon kecil dalam sistem memiliki keuntungan menulis ke database bahwa mereka relatif aman dan tidak mudah dihapus oleh pengguna secara tidak sengaja.
Jika Anda menyimpan sejumlah besar gambar, biasanya dilakukan untuk menyimpannya ke folder di server. Ada banyak cara untuk menyelesaikan unggahan, Anda dapat menggunakan metode streaming dan metode FTP, dan metode fileupload digunakan di sini.
Dengan ukuran sistem yang berbeda, metode pemrosesan file gambar juga berbeda. Jika jumlah gambar dalam sistem tidak besar, cukup simpan semua gambar di direktori yang sama. Jika gambar -gambar lebih banyak terakumulasi, Anda dapat mengklasifikasikan dan menyimpan gambar sesuai dengan klasifikasi materi, yang akan menghemat waktu dalam mencari file di disk.
Saat mengunggah gambar ke file, Anda dapat mengunggah gambar langsung ke direktori, Anda juga dapat menulis nama file gambar dan jalur file ke database, atau Anda dapat secara dinamis membuat jalur file dalam program. Jika perusahaan memerlukan gambar untuk disimpan di server khusus, lebih tepat untuk menulis jalur file ke file lengkap. Secara umum, lebih mudah untuk memproses jika suatu materi (materi) sesuai dengan gambar. Jika sesuai dengan beberapa gambar, itu perlu digunakan bersama dengan daur ulang. Di satu sisi, perlu untuk memproses tampilan dinamis gambar, dan di sisi lain, perlu untuk memeriksa apakah penamaan file gambar digandakan. Selain itu, saat memproses gambar (mengunggah, menghapus, dan memodifikasi), Anda perlu bekerja sama dengan transaksi.
Berikut ini adalah pengantar utama untuk implementasi paling dasar dari menggunakan Fileupload untuk mencapai unggahan gambar.
1. Gunakan tag file di ujung depan:
<input name = "nama file" type = "file" class = "text1" size = "40" maxlength = "40">
2. Atur format enctype file: multipart/form-data
<Form name = "itemForm" target = "_ self" id = "itemForm" Method = "Post" Action = "Servlet/Item/FileuploadServlet" Enctype = "Multipart/Form-Data">
Instruksi tentang enctype = "multipart/form-data":
Jika format ini digunakan dalam JSP, servlet yang sesuai tidak dapat menggunakan request.getParameter () untuk mendapatkan parameter. Anda harus menggunakan metode Parserequest dari Objek ServletFileUpload untuk terlebih dahulu menguraikan data dalam objek permintaan, dan kemudian menggunakan bendera ISFormField dari elemen parsed dan bekerja sama dengan metode GetFieldName untuk mendapatkan data.
3. Implementasi FileuploadServlet:
paket com.bjpowernode.drp.basedata.web; impor java.io.file; impor java.io.ioException; impor java.util.iterator; impor java.util.list; impor javax.servlet.servletException; impor javax.servlet.http.httpservlet; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletResponse; impor org.apache.commons.fileupload.fileItem; impor org.apache.commons.fileupload.disk.diskfileItemFactory; impor org.apache.commons.fileupload.servlet.servletfileupload; impor com.bjpowernode.drp.baseddata.manager.itemManager; impor com.bjpowernode.drp.baseddata.manager.itemManagerImpl; impor com.bjpowernode.drp.util.applicationException; kelas publik FileuploadServlet memperluas AbstractItemServlet {private file unggahpath; File Private Temppath; @Override public void init () melempar servletException {// Ketika sistem dimulai, mulailah inisialisasi. Selama inisialisasi, periksa apakah folder di mana gambar diunggah dan folder di mana file sementara disimpan ada. Jika tidak ada, buat // dapatkan jalur fisik nyata yang sesuai dengan direktori root unggahpath = file baru (getservercontext (). GetRealPath ("unggah")); System.out.println ("unggahPath ====" + unggahpath); // jika direktori tidak ada jika (! Unggahpath.exists ()) {// Buat direktori unggahpath.mkdir (); } // direktori sementara // file tempfile = file baru (item.getName ()) Bangun objek sementara Temppath = file baru (getserVletContext (). GetRealPath ("temp")); if (! Temppath.exists ()) {Temppath.mkdir (); } // Jika metode kelas induk tidak ditampilkan, tidak akan ada contoh itemManager, yang akan menyebabkan pointer nol super.init (); } public void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {dopost (permintaan, respons); } public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {// dapatkan data dari item_upload.jsp, karena format encoding yang tidak ada yang diunggah/formulir yang diunggah dari yang diunggah/menggunakan ikat biasa, menggunakan multipe/formulir. req.getParameter () // string itemno = req.getParameter ("itemno"); //System.out.println("Itemno======= " + itemno); /***************************************** Gunakan komponen fileupload untuk menguraikan formulir *********************** /// DISKFILEITEMFACTORY: Buat pabrik untuk objek FileItem. Di kelas pabrik ini, Anda dapat mengonfigurasi ukuran buffer memori dan direktori tempat file sementara disimpan. DiskFileItemFactory Factory = DiskFileItemFactory baru (); // ukuran maksimum yang akan disimpan di pabrik memori. // Lokasi untuk menyimpan data yang lebih besar dari getizeThreshold () factory.setrepository (Temppath); // ServletFileUpload: Bertanggung jawab untuk memproses data file yang diunggah dan merangkum setiap bagian data ke dalam objek FileItem. // Saat menerima data file yang diunggah, konten akan disimpan ke cache memori. Jika konten file melebihi ukuran buffer yang ditentukan oleh DiskFileItemFactory, // File akan disimpan ke disk dan disimpan sebagai file sementara dalam direktori DiskFileItemFactory yang ditentukan. // Setelah data file diterima, ServletUpload menulis data dari file ke dalam file dalam direktori file yang diunggah servletfileupload unggah = servletfileupload baru (pabrik); // Ukuran maksimum sebelum fileuploadException akan dilemparkan unggah.setsizeMax (1000000 * 20); / ******************* Purset data yang dilewati oleh formulir dan kembalikan Tipe Data Koleksi Daftar: FileItem *******************/ Coba {Daftar FileItems = unggah.parseRequest (permintaan); String itemno = ""; // iterator iter = FileItems.iterator () Ambil iterator //iter.hasnext () Periksa apakah ada elemen dalam urutan untuk (iterator iter = fileitems.iterator (); iter.hasnext ();) {// Dapatkan elemen berikutnya dalam urutan fileItem item = (fileitem) ITER.) // menilai apakah itu file atau informasi teks // itu adalah bidang input formulir biasa jika (item.isFormField ()) {if ("itemno" .equals (item.getFieldName ())) {itemno = item.getString (); }} // apakah itu bidang input if (! Item.isFormField ()) {// Nama dan jalur lengkap dari file yang diunggah string fileName = item.getName (); ukuran panjang = item.getSize (); // Tentukan apakah file dipilih if ((fileName == null || filename.equals ("")) && size == 0) {lanjutkan; } // mencegat string seperti: c: /windows/debug/passwd.log filename = filename.substring (filename.LastIndexof ("//") + 1, filename.length ()); // Simpan file pada disk fisik server: Parameter pertama adalah: jalur lengkap (tidak termasuk nama file). Parameter kedua adalah: nama file //item.write(file); // Ubah nama file dan nama materialnya sama, dan ekstensi file dipaksa menjadi gif //item.write(new file (unggahpath, itemno + ".gif")); // Simpan file ke direktori tanpa memodifikasi nama file item.write (file baru (unggahPath, nama file)); // tulis nama file gambar ke database itemManager.uploadIteMimage (itemno, fileName); }} response.sendredirect (request.getContextPath () + "/servlet/item/searchItemServlet"); } catch (Exception e) {E.PrintStackTrace (); Lempar ApplicationException baru ("Unggah gagal!"); }}} Kelas ini mewarisi AbstractItemServlet: kelas induk abstrak dari semua servlet material, bertanggung jawab untuk instantiasi itemManager
/** * Kelas induk abstrak dari semua servlet material bertanggung jawab untuk instantiating itemManager * @author limin * */kelas abstrak publik AbstractItemservlet memperluas httpservlet {// meskipun tidak aman, jika tidak ada baca, tidak akan ada kesalahan yang dilindungi itemManager itemManager = null; @Override public void init () melempar servletException {itemManager = new ItemManagerImpl ()}}ItemManagerImpl adalah subclass yang mengimplementasikan antarmuka ItemManager. Ada satu masalah dengan model desain ini, yang memiliki optimasi gaji, tetapi di sini kami tidak akan membuat komentar yang tidak relevan untuk menjelaskan unggahan gambar.
Meringkaskan:
Tentang metode inisialisasi init ():
Ketika servlet diinisialisasi, direktori dibuat secara dinamis. Berikut ini adalah unggahan dan file temppath sementara untuk proyek dan direktori di bawah Webapps Tomcat.
Perlu dicatat bahwa metode super.init () perlu dipanggil di sini (Super bukan referensi ke objek kelas induk, tetapi bertanggung jawab atas panggilan ke metode kelas induk), jika tidak, dapat menyebabkan penunjuk nol ke kelas.
Mengunggah secara kasar dilakukan dalam tiga langkah: Gunakan komponen Fileupload untuk menguraikan formulir; Parse data yang dilewati oleh formulir, dan kembalikan tipe data pengumpulan daftar: FileItem; Akhirnya unggah gambar.
Gunakan metode fileitem isFormField () untuk menentukan apakah itu teks normal atau file;
Gunakan fileItem.write (file baru (unggahPath, nama file)) untuk mengunggah file. Parameter pertama adalah: jalur lengkap (tidak termasuk nama file). Parameter kedua adalah: nama file;
Memproses Data Teks Normal:
if ("itemno" .equals (item.getFieldName ())) {itemno = item.getString (); }Mengunggah adalah teknologi yang relatif matang selama bertahun -tahun, dan ada banyak yang dapat kita gunakan secara langsung dalam proyek harian kita, tetapi memahami beberapa prinsip dasar sangat penting.
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.