Artikel ini membagikan kode spesifik untuk unggahan multi-file Javaweb dan pengemasan zip dan mengunduh untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
Fungsi unggahan dan unduhan file sering digunakan dalam proyek. Artikel ini merangkum adegan-adegan di lingkungan Javaweb, unggahan multi-file dan fungsi pengemasan dan unduhan batch, termasuk bagian depan meja dan bagian backend.
Pertama -tama, mari kita jelaskan:
Halaman tidak dapat disegarkan permintaan AJAX secara langsung, dan unduh dan unggah permintaan tidak dapat dikirim. Mengunggah dan mengunduh harus diimplementasikan berdasarkan seluruh permintaan halaman. Fungsi ini umumnya dicapai dengan membangun bentuk bentuk dalam proyek.
1. Unggah beberapa file
Persyaratan proyek adalah untuk mewujudkan fungsi unggahan multi-gambar. Setelah merujuk pada banyak metode plug-in yang ditemukan di internet, saya memutuskan untuk memilih solusi unggahan jQuery asli. Ikuti langkah -langkah di bawah ini untuk memposting kode tertentu.
1. Bagian html (dapat dihilangkan untuk dibangun dengan JS)
<Form id = "unggahForm" metode = "post" enctype = "multipart/form-data"> <input type = "file" hidden name = "fileimage" multipel/> <a href = "javascript: void (0);" rel = "eksternal nofollow" rel = "eksternal nofollow" id = "filesubmit" onclick = "unggahfilemulti ()"> Unggah informasi </a> </form>
Ada beberapa penjelasan:
1. Enctype = "multipart/form-data" dalam bentuk
2. Dalam contoh, gunakan tag untuk membangun kirim
2. JS Part
var formdata = formData baru ($ ("#unggah") [0]); formdata.append ("foldname", "datumlist"); // Atur nama folder induk formdata.append ("odercode", selfordercode); formdata.append ("datumtype", datumtype); $. Ajax ({type: "post", data: ifespe: "order: fungsi false/datumlist/batchinstyping: {{{{{{{{forse), Hasil. }, error: function () {showerrortoast ('permintaan gagal!')}}); Ada beberapa penjelasan di atas:
1. Var FormData = FormData baru ($ ("#unggah dari") [0]);
2. Gunakan formdata.append ("odercode", selfordercode); untuk menambahkan parameter lain
Java Backend
MultiparthttpServletRequest mRequest = (multipartttpservletRequest) permintaan; Daftar <ProdartFile> file = mRequest.getFiles ("FileImage");Ada beberapa penjelasan di atas:
1. Dapatkan multiparthttpservletrequest, sesuai dengan nama tag file
2. Batch Unduh File
Dalam proyek ini, persyaratannya adalah mengunduh sejumlah file dalam batch. Gunakan ZIP untuk mengompres file di server dan kemudian unduh file ke klien.
Untuk kueri online, menggunakan kelas output file Java sendiri tidak dapat menyelesaikan masalah nama file yang kacau dalam file terkompresi. Solusi: Gunakan paket Ant.jar. Saat membuat file terkompresi, Anda dapat mengatur format pengkodean file, dan masalah nama file yang kacau akan diselesaikan.
Bagian html (dapat dihilangkan untuk dibangun dengan JS)
<Form id = "unggahForm" Metode = "POST" ENCTYPE = "Multipart/Form-Data"> <Div> <input type = "hidden" name = "ordercode"/> <input type = "hidden" name = "datumtype"/> <a href = "javascript: void (0);" rel = "eksternal nofollow" rel = "eksternal nofollow" onclick = "BatchDatumListDownload ()"> Batchdown </a> </div> </form>
Bagian JS
// Batch Unduh Fungsi BatchDatumListDownLoad () {var param = {}; param.datumType = $ ("#datumtypeq"). val (); if (param.datumType == -1) {param.datumType = null; // query all} param.ordercode = selforderCode; $ ("#Input UploadForm [Name = OrderCode]"). Val (param.orderCode); $ ("#unggahForm input [name = datumType]"). val (param.datumType); var form = $ ("#unggah") [0]; form.action = "order/datumlist/batchdownloadDatumlist"; form.method = "post"; Form.submit (); // Form Kirim}Bagian backend
public void batchdownloadDatumList (datumlistvo datumlistvo, httpservletResponse response) {coba {// daftar file daftar query <datumlistvo> volist = datumlistService.queryDatumlists (datumlistVo); // Daftar File Compress <FILE> File = ArrayList baru <> (); untuk (datumlistvo: volist) {file file = file baru (vo.getDatumUrl ()); file.add (file); } String fileName = datumlistvo.getOrderCode () + "_" + datumlistvo.getDatumType () + ".zip"; // Buat file sementara untuk unduhan kemasan di string sisi server Globaluploadpath = ""; String osname = system.getProperty ("os.name"); if (osname.tolowercase (). indexOf ("windows")> = 0) {globaluploadpath = globalkeys.getString (globalkeys.windows_upload_path); } else if (osname.tolowerCase (). indexOf ("linux")> = 0 || osname.tolowercase (). indexOf ("mac")> = 0) {globaluploadpath = globalkeys.getString (globalkeys.linux_upload_path); } String outfilePath = GlobaluploadPath + File.separator + FileName; File file = file baru (outfilePath); // file output aliran fileoutputStream outstream = new fileoutputStream (file); // Compress Stream ZipoutputStream ToClient = New ZipoutputStream (outstream); // Atur pengkodean karakter dalam file terkompresi, jika tidak, itu akan menjadi kacau ToClient.setencoding ("GBK"); Ziputil.zipfile (file, toclient); toclient.close (); outstream.close (); Ziputil.downloadzip (file, respons); } catch (Exception e) {E.PrintStackTrace (); }}Di antara mereka ziputil.java
/** * File dalam daftar file terkompresi * * @param file * @param outputStream * @throws ioException */public static void zipfile (file daftar, zipoutputStream outputStream) melempar ioException, servletException {try {int size = file.size (); // file dalam daftar terkompresi untuk (int i = 0; i <size; i ++) {file file = (file) file.get (i); coba {zipfile (file, outputStream); } catch (Exception e) {lanjutan; }}} catch (Exception e) {throw e; }}/** * Write the file to the zip file* * @param inputFile * @param outputstream * @throws Exception */public static void zipFile(File inputFile, ZipOutputStream outputstream) throws IOException, ServletException { try { if (inputFile.exists()) { if (inputFile.isFile()) { FileInputStream instream = new FileInputStream (inputFile); BufferedInputStream Binstream = baru bufferedInputStream (instream); Entri zipentry = zipentry baru (inputFile.getName ()); outputStream.putNextEntry (entri); final int max_byte = 10 * 1024 * 1024; // Aliran maksimum adalah streamtotal 10m panjang = 0; // kapasitas stream intream intreamnum = 0; // Jumlah aliran yang perlu dipisahkan int leavebyte = 0; // jumlah karakter yang tersisa di byte file [] inoutbyte; // array byte menerima data file streamTotal = binstream.available (); // Jumlah maksimum karakter aliran diperoleh melalui metode yang tersedia streamnum = (int) math.floor (streamtotal /max_byte); // Jumlah karakter yang tersisa untuk dipisahkan untuk mendapatkan file stream leavesbyte = (int) streamTotal % max_byte; // Setelah membagi file, nomor yang tersisa if (streamnum> 0) {for (int j = 0; j <streamnum; ++ j) {inoutbyte = byte baru [max_byte]; // baca di aliran dan simpan di byte array binstream.read (inoutbyte, 0, max_byte); outputStream.write (inoutbyte, 0, max_byte); // Tuliskan stream}} // tuliskan data aliran yang tersisa inoutbyte = byte baru [Leaverbyte]; Binstream.read (Inoutbyte, 0, Leaverbyte); outputStream.write (inoutbyte); outputStream.closeentry (); // Menutup entri zip saat ini dan memposisikan aliran untuk menulis entri berikutnya Binstream.close (); // tutup instream.close (); }} else {lempar servletException baru ("File tidak ada!"); }} catch (ioException e) {throw e; }}/** * Unduh file yang dikemas * * file @param * @param response */public static void downloadzip (file file, httpservletResponse response) {coba {// unduh file sebagai aliran. BufferedInputStream fis = baru bufferedInputStream (FileInputStream baru (file.getPath ())); byte [] buffer = byte baru [fis.available ()]; fis.read (buffer); fis.close (); // Clear Response Response Response.reset (); OutputStream ToClient = baru bufferedOutputStream (response.getoutputStream ()); response.setContentType ("Application/Octet-stream"); response.setheader ("Disposisi konten", "lampiran; fileName =" + file.getName ()); toclient.write (buffer); toclient.flush (); toclient.close (); file.delete (); // hapus file sisi server yang dihasilkan} catch (ioException ex) {ex.printstacktrace (); }} Di atas pada dasarnya memenuhi persyaratan untuk mengunggah dan mengunduh file.
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.