Di bagian sebelumnya, kami menyelesaikan fungsi penambahan dan memperbarui produk. Kedua bagian ini melibatkan pengunggahan gambar produk, dan tidak ada penjelasan rinci. Untuk tujuan ini, artikel ini memperkenalkan fungsi Struts2 untuk mengimplementasikan unggahan file.
1. Mengenak informasi file
Pertama, kami harus memiliki model untuk merangkum informasi file. Model ini membutuhkan tiga atribut: file, jenis file, dan nama file. Untuk gambar yang ingin kami lewati, kami membuat model baru sebagai berikut:
FileImage kelas publik {file file privat; Private String ContentType; nama file string pribadi; File publik getFile () {return file; } public String getContentType () {return contentType; } public String getFileName () {return fileName; } public void setupload (file file) {// Metode set tidak dapat sama dengan nama atribut, tetapi parameter ketika diteruskan dari latar depan harus sama dengan nama metode yang ditetapkan. Artinya, parameter yang diteruskan di latar depan adalah fileimage.upload this.file = file; } public void setuploadContentType (string contentType) {this.contentType = contentType; } public void setuploadFileName (string fileName) {this.fileName = fileName; }}Dengan cara ini, model ini ditulis. Mempertimbangkan bahwa logika unggahan file tidak unik untuk satu tindakan, kami menulis logika unggahan file ke dalam kelas alat, sehingga semua panggilan tindakan dapat dilakukan. Jadi kami membuat kelas alat unggah file baru (untuk pemrograman antarmuka, kami juga mengekstrak antarmuka kelas alat):
2. Lengkapi kelas alat unggah file
// File Unggah Kelas Alat Antarmuka Antarmuka Publik FileUpload {// Implementasikan fungsi unggahan file, kembalikan nama file baru setelah mengunggah public abstrak string unggahfile (fileImage fileImage); } // File Upload Alat Kelas Implementasi Khusus @Component ("Fileupload") kelas publik Fileuploadutil mengimplementasikan fileupload {private string filePath; @Value ("#{prop.filePath}") //@nilai berarti menemukan kacang dengan id = "prop" di file beans.xml. Ini membaca file konfigurasi properti melalui anotasi, dan kemudian membaca nilai key = filepath dalam file konfigurasi yang sesuai void public setFilePath (string filepath) {system.out.println (filepath); this.filepath = filepath; } // 1. Dapatkan ekstensi pribadi string getFileExt (string fileName) {return fileNameutils.getextension (fileName); } // 2. Hasilkan nomor UUID acak sebagai nama file baru Private String newFileName (string fileName) {string ext = getFileExt (fileName); return uuid.randomuuid (). tostring () + "." + ext; } // Menerapkan fungsi unggahan file, kembalikan nama file baru setelah unggah @Override public string unggah (fileImage fileImage) {// Dapatkan nama file unik baru string pic = newFileName (fileimage.getFileName ()); coba {fileutil.copyfile (fileimage.getFile (), file baru (FilePath, pic)); // Parameter pertama adalah file yang diunggah, dan parameter kedua adalah menyalin file ke jalur pengembalian jalur baru; } catch (Exception e) {lempar runtimeException baru (e); } akhirnya {fileimage.getFile (). delete (); }}}Ada anotasi @Value di atas, yaitu untuk mendapatkan jalur yang akan disimpan oleh file tersebut dari file properti. Untuk detailnya, silakan merujuk ke: Spring untuk mendapatkan informasi file konfigurasi.
3. Suntikan kelas file yang dienkapsulasi dan kelas alat beraksi
Setelah menulis kelas enkapsulasi file dan kelas alat unggah file, kita perlu menyuntikkan kedua objek ini ke dalam tindakan kita, sehingga fungsi unggahan file dapat diimplementasikan dalam tindakan:
@Controller ("BaseAction") @Scope ("Prototipe") Basa Public Class <T> Memperluas ActionSupport mengimplementasikan permintaan, sessionAware, ApplicationAware, ModelDriven <T> {// FileImage FileImage yang dilindungi; // Unggah Kelas Alat File @Resource Protected Fileupload Fileupload; FileImage publik getFileImage () {return fileImage; } public void setFileImage (FileImage FileImage) {this.fileImage = FileImage; } // hilangkan kode lain yang tidak relevan ...} 4. Menerapkan unggahan file
Oke, sekarang kita dapat menerapkan unggahan file di ProductAction. Jika kelas alat ditulis, jumlah kode dalam tindakan akan sangat kecil, yang juga merupakan keuntungan yang dibawa oleh enkapsulasi.
@Controller ("ProductAction") @Scope ("ProtoType") ProductAction kelas publik memperluas basa <product> {// hilangkan kode tidak relevan lainnya ... public void save () melempar Exception {// Kelas Alat FileUpload yang diekstraksi, Metode UploadFile secara langsung menerima objek FileMage dan mengembalikan nama gambar baru. model.setpic (pic); model.setDate (tanggal baru ()); System.out.println (model); // informasi produk disimpan di ProductService.Save (model); } public void update () {string pic = fileupload.uploadfile (fileImage); model.setpic (pic); model.setDate (tanggal baru ()); System.out.println (model); // Perbarui Produk ProdukService.update (model); }}Dengan cara ini, kami menyelesaikan fungsi mengunggah file dari meja depan.
Alamat asli: http://blog.csdn.net/eson_15/article/details/51366384
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.