Lingkungan: Maven + springmvc + spring + mybatis + mysql
Artikel ini terutama menjelaskan cara menggunakan input untuk mengunggah file ke direktori yang ditentukan server, atau menyimpannya ke database; Cara mengunduh file dari database, menampilkan file gambar dan mencapai penskalaan.
Simpan file dalam database, umumnya array byte yang menyimpan file, dan tipe data database yang sesuai adalah gumpalan.
Pertama, Anda perlu membuat database, di sini Anda menggunakan database MySQL.
Catatan: Kode yang diberikan dalam artikel ini sebagian besar dikutip dan tidak lengkap.
1. Persiapan
Gunakan Maven untuk membuat proyek SpringMVC+Spring+MyBatis+MySQL.
Untuk cara mengintegrasikan pegas+mybatis+mysql, lihat pengenalan mybatis dan konfigurasikan mybatis+spring+mysql:
Mybatis Learning One, Pendahuluan dan Konfigurasi Mybatis Mybatis + Spring + MySQL
Untuk pembangunan lingkungan SpringMVC, silakan lihat: Gunakan Eclipse untuk membangun proyek SpringMVC Maven:
Bangun Proyek SpringMVC Maven Menggunakan Eclipse
Dalam HTML latar depan, enctype bentuk adalah multipart/form-data. Perhatikan bahwa nama input dan pilih harus sesuai dengan anggota dalam bentuk siswa satu per satu.
URL yang diunggah adalah addaction.do. Parameter metode tindakan ini menggunakan StudentForm untuk memetakan data yang dikirimkan. Pada saat ini, data file yang dikirimkan dapat diperoleh. Lalu kami beroperasi di file.
Buat tabel photo_tbl: Bidang photo_data digunakan untuk menyimpan file, dan jenisnya adalah mybatis longblob; Kemudian tulis fotomapper antarmuka Java Mapper: termasuk penambahan, penghapusan, modifikasi dan pencarian; File XML Mappper: pernyataan SQL yang sesuai dengan antarmuka Java.
Dan file konfigurasi pegas perlu menambahkan deklarasi kacang.
Di bawah ini adalah cuplikan kode HTML, tindakan, dan bentuk siswa; Buat kode antarmuka sql, photomapper.java, dan photomapper.xml kode file dari tabel photo_tbl.
1.1 metode penulisan formulir html
1. <Form Action = "<c: nilai url = 'addaction.do'/>" method = "post" enctype = "multipart/form-data"> 2. <able> 3. <tr> 4. <Td align = "kanan"> Foto: </td> 5. <td> <input type = "file" name = "studentphoto"/</td> 5. 9. </form>
1.2 Metode Tindakan
1./** 2. * Ditambahkan - Kirim 3. */ 4.@RequestMapping (value = "addaction.do") 5. Public String Add_Action (ModelMap Model, Studentform Form) {6. 7.} 1.3 Kelas Studentform
1.Prackage liming.student.manager.web.model; 2. 3. Import org.springframework.web.multipart.multipartfile; 4. 5.Perdai Public Studentform memperluas GeneralForm {6. 7. Private String StudentName; 8. Private int Studentsex; 9. Private String StudentBirthday; 10. Siswa multipartfil swasta; 11. 12.} 1.4 Buat photo_tbl
1. Buat tabel Photo_tbl 2. (3. Foto_id Varchar (100) Kunci utama, 4. Foto_data longblob, 5. File_name varchar (10) 6.);
1.5 Antarmuka Photomapper
1.@Repositori 2.@Transaksional 3. Fotomapper Antarmuka Publis {4. 5. Public Void CreatePhoto (Entitas FotoEntity); 6. 7. Publik int deletephotobyphotoid (string photoid); 8. 9. Public int updatePhotodate (@param ("photoid") string photoid, @param ("photodate") byte [] photodate); 10. 11. Public Photoentity GetPhotoentityByphotoid (String Photoid); 12. 13.} 1.6 file photomapper.xml
Termasuk penambahan, penghapusan, modifikasi dan pencarian. Fotoid yang baru ditambahkan menggunakan fungsi kustom MySQL untuk secara otomatis menghasilkan kunci primer. Saat mengoperasikan gumpalan, Anda perlu mengatur typeHandler ke "org.apache.iathis.type.blobtypehandler. Parameter perlu ditentukan nanti saat menyisipkan dan memperbarui, dan mereka perlu ditentukan dalam HasilMap.
1. <? Xml Version = "1.0" encoding = "UTF-8"?> 2. <! Doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3. mapper namespace = "liming.student.manager.data.photomapper"> 4. <resultMap type = "liming.student.manager.data.model.photoentity" id = "photomapper_resultMap_photoentity"> 5. <id properti = "photomapper" photo ". <properti result = "photodata" kolom = "photo_data" javatype = "byte []" jdbctype = "blob" typeHandler = "org.apache.iatis.type.blobtypehandler" /> 7. <hasil hasil = "nama file" = "file_name" javatipe = ". 10. <masukkan id = "createPhoto" parameTerType = "liming.student.manager.data.model.photoentity"> 11. <SelectKey keyproperty = "photoid" hasilnya = "string" order = "Sebelum"> 12. Pilih nextVal ('photo') 13. </selectkey> 14. Sisipkan ke dalam photo "> 12. 17. Values ( #{Photoid, JDBCTYPE = VARCHAR}, 18. #{photodata, javatype = byte [], jdbctype = blob, typeHandler = org.apache.atis.type.blobtypehandler}, 19. #{filename, jdbctype = varchar} 22. id = "deletephotobyphotoid"> 23. Hapus dari photo_tbl 24. Di mana photo_id = #{photoid, jdbctype = varchar} 25. </delete> 26. 27. <update id = "updatePhotodata"> 28. Update photo_tbl 29. Set photo_data = #{fotodata = 28. typeHandler = org.apache.iathis.type.blobtypehandler}, 30. file_name = #{filename, jdbctype = varchar} 31. Di mana photo_id = #{photoid, jdbctype = varchar} 32. </update> 33. 34. <Select ID = "getPhotoEny 32. resultMap = "photomapper_resultmap_photoentity"> 35. SELECT PHOTO_ID, 36. Photo_data, 37. File_name 38. Dari Photo_tbl 39. Di mana photo_id = #{photoid, jdbctype = varchar} 40. </pilih> 41. </mapper> 1.7 File Konfigurasi Musim Semi
File konfigurasi pegas perlu menambahkan deklarasi org.springframework.web.multipart.commons.CommonsMultipartresolver.
1. <bean id = "multipartresolver"> 2. <Name properti = "maxuploadsize" value = "1073741824" /> 3. < /Bean>
2. Letakkan file di server
1.Private static final string unggahFilePath = "d: // temp_upload_file //"; 2. 3./** 4. * Baru - Kirim Hanya Menyimpan File ke Server 5. */ 6.@RequestMapping (value = "addaction.do") 7. Public String Add_Action (model ModelMap, Formulir StudentForm) {8.try {9. MultipartFile unggahfile = form.getStudentPhoto (); 10. String FileName = unggahfile.getoriginalFileName (); 11. InputStream adalah = unggahfile.getInputStream (); 12. // Jika server sudah memiliki file dengan nama yang sama dengan file unggah, pesan prompt adalah output 13. File tempfile = file baru (unggahfilePath + fileName); 14. if (tempfile.exists ()) {15. boolean delresult = tempfile.delete (); 16. System.out.println ("Hapus file yang ada:" + delResult); 17.} 18. // Mulai menyimpan file ke server 19. if (! Filename.equals ("")) {20. FileOutputStream fos = new FileOutputStream (unggahfilePath + filename); 21. Byte [] buffer = byte baru [8192]; // Baca 8K byte setiap kali 22. int count = 0; 23. // Mulailah membaca byte file yang diunggah dan output ke server yang diunggah aliran output stream 24. while ((count = is.read (buffer))> 0) {25. fos.write (buffer, 0, count); // Tulis aliran byte ke file server 26.} 27. fos.close (); // tutup Objek FileOutputStream 28. is.close (); // Objek InputStream 29.} 30.} catch (FileNotFoundException e) {31. E.PrintStackTrace (); 32.} Catch (ioException e) {33. E.PrintStackTrace (); 34.} 35.} 3. Unggah file ke database
1./** 2. * Baru - Kirim dan Simpan File ke Basis Data 3. */ 4.@RequestMapping (value = "addaction.do") 5. Public String Add_Action (model ModelMap, Formulir Studentform) {6. InputStream IS = Form.getStudentPhoto (). GetInputStream (); 7. Byte [] studentphotodata = byte baru [(int) form.getstudentphoto (). GetSize ()]; 8. IS.Aread (Studentphotodata); 9. String filename = form.getstudentphoto (). GetoriginalfileName (); 10. Photoentity Photoentity = PhotoEntity baru (); 11. photoentity.setphotodata (Studentphotodata); 12. Photoentity.setFileName (nama file); 13. this.photomapper.createPhoto (photoentity); 14.} 4. Unduh file
Untuk mengunduh file, Anda perlu mengembalikan array byte ke file.
Pertama, gunakan mybatis untuk mengetahui array byte di database dan tentukan nama file (termasuk format). Kemudian gunakan OutputStream untuk memasukkan file
1.@RequestMapping (value = "downphotobyid") 2.Public membatalkan DownPhotObyStudentId (ID String, respons httpservletResponse akhir) {3. FotoEntity Entity = this.photomapper.getPhotoentityByphotoid (id); 4. Byte [] data = entity.getPhotodata (); 5. String FileName = entity.getFileName () == null? "Photo.png": entity.getFileName (); 6. FileName = urlencoder.encode (nama file, "UTF-8"); 7. Response.reset (); 8. Response.setHeader ("Disposisi Konten", "lampiran; nama file =/" " + nama file +"/""); 9. response.addheader ("panjang konten", "" + data.length); 10. Response.setContentType ("Aplikasi/Octet-Stream; Charset = UTF-8"); 11. OutputStream OutputStream = baru bufferedOutputStream (response.getoutputStream ()); 12. OutputStream.write (data); 13. outputStream.flush (); 14. outputStream.close (); 15.}<a href = "< %= request.getContextPath () %>/downphotobyid.do?id=8000001"> Download Foto </a>
5. File Gambar Byte Tampilan
1.@RequestMapping (value = "getPhotobyId") 2.Public void getPhotobyId (ID String, respons httpservletResponse akhir) {3. FotoEntity Entity = this.photomapper.getPhotoentityByphotoid (id); 4. Byte [] data = entity.getPhotodata (); 5. Response.setContentType ("Image/JPEG"); 6. Response.setcharacterencoding ("UTF-8"); 7. OutputStream OutputSream = response.getOutputStream (); 8. InputStream in = ByteArrayInputStream baru (data); 9. int len = 0; 10. Byte [] buf = byte baru [1024]; 11. while ((len = in.read (buf, 0, 1024))! = -1) {12. outputsream.write (buf, 0, len); 13.} 14. outputsream.close (); 15.}<img src = "< %= request.getContextPath () %>/getphotobyid.do?id=8000001"/>
6. Skala gambar berdasarkan panjang dan lebar proporsi yang sama
1.@requestMapping (value = "getPhotoid") 2.Public void getPhotobyId (ID String, lebar int, tinggi int, respons httpservletResponse akhir) {3. FotoEntity entitas = this.photomapper.getphotoentityByphotoid (id); 4. Byte [] data = entity.getPhotodata (); 5. if (lebar! = 0 && tinggi! = 0) {6. data = skalaMage (data, lebar, tinggi); 7.} 8. Response.setContentType ("Image/JPEG"); 9. Response.setcharacterencoding ("UTF-8"); 10. OutputStream outputSream = response.getOutputStream (); 11. InputStream in = new ByteArrayInputStream (data); 12. Int len = 0; 13. Byte [] buf = byte baru [1024]; 14. while ((len = in.read (buf, 0, 1024))! = -1) {15. outputsream.write (buf, 0, len); 16.} 17. outputsream.close (); 18.} 19. 20. Byte statis Public [] skala (byte [] data, lebar int, tinggi int) melempar ioException {21. BufferedImage buffered_oldImage = imageIO.read (baru ByteArrayInputStream (data))); 22. int ImageOldWidth = buffered_oldimage.getWidth (); 23. int ImageOldHeight = buffered_oldimage.getHeight (); 24. Double Scale_x = (ganda) Lebar / ImageOldWidth; 25. Double scale_y = (ganda) tinggi / imageOldHeight; 26. Double Scale_xy = Math.min (skala_x, scale_y); 27. int imagenewwidth = (int) (imageOldWidth * scale_xy); 28. int imagenewheight = (int) (imageOldHeight * scale_xy); 29. BufferedImage buffered_newimage = BufferedImage baru (ImageNeWwidth, ImageNeWHeight, bufferedImage.type_int_rgb); 30. Buffered_newimage.getGraphics (). DrawImage (buffered_oldimage.getScaledInstance (ImageNeWwidth, ImageNeWHeight, bufferedImage.scale_smooth), 0, 0, null); 31. Buffered_newimage.getGraphics (). Dispose (); 32. ByTeArrayOutputStream outputStream = new ByTeArrayOutputStream (); 33. Imageo.write (buffered_newimage, "jpeg", outputstream); 34. Return outputStream.tobytearray (); 35.}<img src = "< %= request.getContextPath () %>/getphotobyid.do?id=8000001&width=300&height=300"/>
Di atas adalah kombinasi mybatis dan springmvc untuk mengimplementasikan fungsi unggahan dan unduhan file. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!