亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SSH框架網(wǎng)上商城項(xiàng)目第13戰(zhàn)之Struts2文件上傳功能

 更新時(shí)間:2016年06月03日 12:02:53   作者:eson_15  
這篇文章主要為大家詳細(xì)介紹了SSH框架網(wǎng)上商城項(xiàng)目第13戰(zhàn)之Struts2文件上傳功能的相關(guān)資料,感興趣的小伙伴們可以參考一下

上一節(jié)我們做完了添加和更新商品的功能,這兩個(gè)部分里有涉及到商品圖片的上傳,并沒(méi)有詳細(xì)解說(shuō)。為此,這篇文章詳細(xì)介紹一下Struts2實(shí)現(xiàn)文件上傳的功能。
1. 封裝文件信息
我們首先得有一個(gè)Model來(lái)封裝文件的信息,這個(gè)Model里需要有三個(gè)屬性:文件、文件類(lèi)型和文件名。針對(duì)我們要傳的圖片,我們新建一個(gè)Model如下:

public class FileImage { 
 private File file; 
 private String contentType; 
 private String filename; 
  
 public File getFile() { 
  return file; 
 } 
 
 public String getContentType() { 
  return contentType; 
 } 
 
 public String getFilename() { 
  return filename; 
 } 
 
 public void setUpload(File file) { //set方法可以不用和屬性名一樣,但是前臺(tái)傳進(jìn)來(lái)時(shí)的參數(shù)得和set方法名相同。即前臺(tái)傳的參數(shù)為fileImage.upload 
  this.file = file; 
 } 
  
 public void setUploadContentType(String contentType) { 
  this.contentType = contentType; 
 } 
  
 public void setUploadFileName(String filename) { 
  this.filename = filename; 
 } 
} 

這樣Model就寫(xiě)好了,考慮到文件上傳的邏輯不是單個(gè)Action所特有的,所以我們將文件上傳的邏輯寫(xiě)到工具類(lèi)中,這樣可供所有的Action調(diào)用。所以我們新建一個(gè)文件上傳工具類(lèi)(為了面向接口編程,我們也將工具類(lèi)抽出個(gè)接口):

2. 完成文件上傳工具類(lèi)

//文件上傳工具類(lèi)接口 
public interface FileUpload { 
 
 //實(shí)現(xiàn)文件上傳的功能,返回上傳后新的文件名稱 
 public abstract String uploadFile(FileImage fileImage); 
 
} 
 
//文件上傳工具類(lèi)具體實(shí)現(xiàn) 
@Component("fileUpload") 
public class FileUploadUtil implements FileUpload { 
  
 private String filePath; 
 @Value("#{prop.filePath}") 
 //@Value表示去beans.xml文件中找id="prop"的bean,它是通過(guò)注解的方式讀取properties配置文件的,然后去相應(yīng)的配置文件中讀取key=filePath的值 
 public void setFilePath(String filePath) { 
  System.out.println(filePath); 
  this.filePath = filePath; 
 } 
 
 //1. 通過(guò)文件名獲取擴(kuò)展名 
 private String getFileExt(String fileName) { 
  return FilenameUtils.getExtension(fileName); 
 } 
  
 //2. 生成UUID隨機(jī)數(shù),作為新的文件名 
 private String newFileName(String fileName) { 
  String ext = getFileExt(fileName); 
  return UUID.randomUUID().toString() + "." + ext; 
 } 
  
 //實(shí)現(xiàn)文件上傳的功能,返回上傳后新的文件名稱 
 @Override 
 public String uploadFile(FileImage fileImage) { 
  //獲取新唯一文件名 
  String pic = newFileName(fileImage.getFilename()); 
  try { 
   FileUtil.copyFile(fileImage.getFile(), new File(filePath, pic));//第一個(gè)參數(shù)是上傳的文件,第二個(gè)參數(shù)是將文件拷貝到新路徑下 
   return pic; 
  } catch (Exception e) { 
   throw new RuntimeException(e); 
  } finally { 
   fileImage.getFile().delete(); 
  } 
 } 
} 

上面有個(gè)@Value注解,是從properties文件中獲取文件要存入的路徑的,具體可參見(jiàn):Spring獲取配置文件信息 。

3. 在Action中注入封裝文件類(lèi)和工具類(lèi)
 寫(xiě)好了文件封裝類(lèi)和上傳文件工具類(lèi)后,我們需要將這兩個(gè)對(duì)象注入到我們的Action中,這樣就可以在Action中實(shí)現(xiàn)文件上傳的功能了:

@Controller("baseAction") 
@Scope("prototype") 
public class BaseAction<T> extends ActionSupport implements RequestAware,SessionAware,ApplicationAware,ModelDriven<T> { 
 
 //封裝了圖片信息的類(lèi) 
 protected FileImage fileImage; 
  
 //上傳文件工具類(lèi) 
 @Resource 
 protected FileUpload fileUpload; 
 
 public FileImage getFileImage() { 
  return fileImage; 
 } 
 public void setFileImage(FileImage fileImage) { 
  this.fileImage = fileImage; 
 } 
 //省略其他無(wú)關(guān)代碼…… 
} 

4. 實(shí)現(xiàn)文件的上傳
 好了,現(xiàn)在我們可以在ProductAction中去實(shí)現(xiàn)文件上傳了,工具類(lèi)寫(xiě)好的話,在Action中的代碼量就很少了,這也是封裝帶來(lái)的優(yōu)點(diǎn)。

@Controller("productAction") 
@Scope("prototype") 
public class ProductAction extends BaseAction<Product> { 
 
  //省略其他無(wú)關(guān)代碼…… 
  
 public void save() throws Exception { 
  //fileUpload工具類(lèi)被抽取了,uploadFile方法直接接受一個(gè)fileImage對(duì)象,返回新的圖片名 
  String pic = fileUpload.uploadFile(fileImage); 
   
  model.setPic(pic); 
  model.setDate(new Date()); 
  System.out.println(model); 
  //商品信息入庫(kù) 
  productService.save(model); 
 } 
  
 public void update() { 
  String pic = fileUpload.uploadFile(fileImage); 
  model.setPic(pic); 
  model.setDate(new Date()); 
  System.out.println(model); 
  //更新商品 
  productService.update(model); 
 } 
} 

這樣我們就完成了從前臺(tái)上傳文件的功能。

原文地址:http://blog.csdn.net/eson_15/article/details/51366384

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Spring Cloud Zuul中路由配置細(xì)節(jié)

    詳解Spring Cloud Zuul中路由配置細(xì)節(jié)

    本篇文章主要介紹了詳解Spring Cloud Zuul中路由配置細(xì)節(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • Java 如何快速實(shí)現(xiàn)一個(gè)連接池

    Java 如何快速實(shí)現(xiàn)一個(gè)連接池

    有沒(méi)有一個(gè)通用的庫(kù)可以快速實(shí)現(xiàn)一個(gè)線程池呢?得益于 Java 完善的生態(tài),前人們針對(duì)這種需要開(kāi)發(fā)了一個(gè)通用庫(kù):Apache Commons Pool(下文簡(jiǎn)稱 ACP)。本質(zhì)上來(lái)說(shuō),ACP 庫(kù)提供的是管理對(duì)象池的通用能力,當(dāng)然也可以用來(lái)管理連接池了!
    2021-05-05
  • 聊聊Object類(lèi)中的wait()和notify()方法

    聊聊Object類(lèi)中的wait()和notify()方法

    這篇文章主要介紹了Object類(lèi)中的wait()和notify()方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • springboot+idea+maven 多模塊項(xiàng)目搭建的詳細(xì)過(guò)程(連接數(shù)據(jù)庫(kù)進(jìn)行測(cè)試)

    springboot+idea+maven 多模塊項(xiàng)目搭建的詳細(xì)過(guò)程(連接數(shù)據(jù)庫(kù)進(jìn)行測(cè)試)

    這篇文章主要介紹了springboot+idea+maven 多模塊項(xiàng)目搭建的詳細(xì)過(guò)程(連接數(shù)據(jù)庫(kù)進(jìn)行測(cè)試),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Springboot2 配置AOP日志的方法步驟

    Springboot2 配置AOP日志的方法步驟

    這篇文章主要介紹了Springboot2 配置AOP日志的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 基于java語(yǔ)言實(shí)現(xiàn)快遞系統(tǒng)

    基于java語(yǔ)言實(shí)現(xiàn)快遞系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于java語(yǔ)言實(shí)現(xiàn)快遞系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Spring中@PropertySource和@Value注解詳解

    Spring中@PropertySource和@Value注解詳解

    這篇文章主要介紹了Spring中@PropertySource和@Value注解詳解,@PropertySource注解可以方便和靈活的向Spring的環(huán)境容器(org.springframework.core.env.Environment Environment)中注入一些屬性,這些屬性可以在Bean中使用,需要的朋友可以參考下
    2023-11-11
  • 在Docker中部署Spring Boot項(xiàng)目過(guò)程詳解

    在Docker中部署Spring Boot項(xiàng)目過(guò)程詳解

    這篇文章主要介紹了在Docker中部署Spring Boot項(xiàng)目,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Java數(shù)字和字符串拼接原理及案例

    Java數(shù)字和字符串拼接原理及案例

    這篇文章主要介紹了Java數(shù)字和字符串拼接原理及案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 詳解Java List的擴(kuò)容機(jī)制原理及應(yīng)用

    詳解Java List的擴(kuò)容機(jī)制原理及應(yīng)用

    在Java中,List是一種非常常用的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)有序的元素集合,本文將分析Java List的擴(kuò)容機(jī)制原理,并通過(guò)示例代碼和測(cè)試代碼來(lái)加強(qiáng)闡述內(nèi)容,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08

最新評(píng)論