最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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è)屬性:文件、文件類型和文件名。針對(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ě)到工具類中,這樣可供所有的Action調(diào)用。所以我們新建一個(gè)文件上傳工具類(為了面向接口編程,我們也將工具類抽出個(gè)接口):

2. 完成文件上傳工具類

//文件上傳工具類接口 
public interface FileUpload { 
 
 //實(shí)現(xiàn)文件上傳的功能,返回上傳后新的文件名稱 
 public abstract String uploadFile(FileImage fileImage); 
 
} 
 
//文件上傳工具類具體實(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中注入封裝文件類和工具類
 寫(xiě)好了文件封裝類和上傳文件工具類后,我們需要將這兩個(gè)對(duì)象注入到我們的Action中,這樣就可以在Action中實(shí)現(xiàn)文件上傳的功能了:

@Controller("baseAction") 
@Scope("prototype") 
public class BaseAction<T> extends ActionSupport implements RequestAware,SessionAware,ApplicationAware,ModelDriven<T> { 
 
 //封裝了圖片信息的類 
 protected FileImage fileImage; 
  
 //上傳文件工具類 
 @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)文件上傳了,工具類寫(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工具類被抽取了,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)文章

  • 淺談Java常見(jiàn)的排序算法

    淺談Java常見(jiàn)的排序算法

    今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí),文章圍繞著Java常見(jiàn)的排序算法展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Spring?Data?Jpa?中原生查詢?REGEXP?的使用詳解

    Spring?Data?Jpa?中原生查詢?REGEXP?的使用詳解

    這篇文章主要介紹了Spring?Data?Jpa?中原生查詢?REGEXP?的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SWT(JFace)體驗(yàn)之StyledText類

    SWT(JFace)體驗(yàn)之StyledText類

    有的時(shí)候Text需要實(shí)現(xiàn)這種那種的樣式。先提供在不使用StyledText類的情況:
    2009-06-06
  • Java數(shù)據(jù)結(jié)構(gòu)之并查集的實(shí)現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之并查集的實(shí)現(xiàn)

    并查集是一種用來(lái)管理元素分組情況的數(shù)據(jù)結(jié)構(gòu)。并查集可以高效地進(jìn)行如下操作。本文將通過(guò)Java實(shí)現(xiàn)并查集,感興趣的小伙伴可以了解一下
    2022-01-01
  • 帶你快速搞定java多線程(5)

    帶你快速搞定java多線程(5)

    這篇文章主要介紹了java多線程編程實(shí)例,分享了幾則多線程的實(shí)例代碼,具有一定參考價(jià)值,加深多線程編程的理解還是很有幫助的,需要的朋友可以參考下
    2021-07-07
  • 如何使用Java在excel單元格中設(shè)置超鏈接

    如何使用Java在excel單元格中設(shè)置超鏈接

    這篇文章主要介紹了如何使用Java在excel單元格中設(shè)置超鏈接,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java判斷字符串回文的代碼實(shí)例

    Java判斷字符串回文的代碼實(shí)例

    在本篇文章里小編給各位整理的是一篇關(guān)于Java判斷字符串回文的代碼實(shí)例內(nèi)容,需要的朋友們可以跟著學(xué)習(xí)參考下。
    2020-02-02
  • Spring?框架的?MethodInterceptor?簡(jiǎn)介及示例代碼

    Spring?框架的?MethodInterceptor?簡(jiǎn)介及示例代碼

    MethodInterceptor接口定義了一個(gè)方法Object?intercept(Object?obj,?Method?method,?Object[]?args,?MethodProxy?proxy)?,該方法在代理對(duì)象的方法被調(diào)用時(shí)被觸發(fā),這篇文章主要介紹了Spring?框架的?MethodInterceptor?簡(jiǎn)介及示例代碼,需要的朋友可以參考下
    2023-09-09
  • Disconf實(shí)現(xiàn)分布式配置管理的原理與設(shè)計(jì)

    Disconf實(shí)現(xiàn)分布式配置管理的原理與設(shè)計(jì)

    這篇文章主要為大家介紹了Disconf實(shí)現(xiàn)分布式配置管理的原理與設(shè)計(jì)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • Springboot打包部署修改配置文件的方法

    Springboot打包部署修改配置文件的方法

    這篇文章主要介紹了Springboot打包部署修改配置文件的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評(píng)論

海口市| 怀宁县| 海淀区| 周口市| 隆昌县| 共和县| 南通市| 安图县| 托克逊县| 措美县| 南郑县| 嵩明县| 紫金县| 广汉市| 尤溪县| 静乐县| 射洪县| 福鼎市| 宁蒗| 五原县| 南皮县| 通江县| 东乌珠穆沁旗| 卓资县| 曲水县| 五大连池市| 赣榆县| 澄城县| 滁州市| 武宣县| 鱼台县| 信丰县| 石屏县| 赤城县| 十堰市| 云南省| 宝坻区| 绥芬河市| 聂拉木县| 凌海市| 建德市|