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

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

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

上一節(jié)我們做完了添加和更新商品的功能,這兩個部分里有涉及到商品圖片的上傳,并沒有詳細解說。為此,這篇文章詳細介紹一下Struts2實現文件上傳的功能。
1. 封裝文件信息
我們首先得有一個Model來封裝文件的信息,這個Model里需要有三個屬性:文件、文件類型和文件名。針對我們要傳的圖片,我們新建一個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方法可以不用和屬性名一樣,但是前臺傳進來時的參數得和set方法名相同。即前臺傳的參數為fileImage.upload 
  this.file = file; 
 } 
  
 public void setUploadContentType(String contentType) { 
  this.contentType = contentType; 
 } 
  
 public void setUploadFileName(String filename) { 
  this.filename = filename; 
 } 
} 

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

2. 完成文件上傳工具類

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

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

3. 在Action中注入封裝文件類和工具類
 寫好了文件封裝類和上傳文件工具類后,我們需要將這兩個對象注入到我們的Action中,這樣就可以在Action中實現文件上傳的功能了:

@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; 
 } 
 //省略其他無關代碼…… 
} 

4. 實現文件的上傳
 好了,現在我們可以在ProductAction中去實現文件上傳了,工具類寫好的話,在Action中的代碼量就很少了,這也是封裝帶來的優(yōu)點。

@Controller("productAction") 
@Scope("prototype") 
public class ProductAction extends BaseAction<Product> { 
 
  //省略其他無關代碼…… 
  
 public void save() throws Exception { 
  //fileUpload工具類被抽取了,uploadFile方法直接接受一個fileImage對象,返回新的圖片名 
  String pic = fileUpload.uploadFile(fileImage); 
   
  model.setPic(pic); 
  model.setDate(new Date()); 
  System.out.println(model); 
  //商品信息入庫 
  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); 
 } 
} 

這樣我們就完成了從前臺上傳文件的功能。

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 淺談Java常見的排序算法

    淺談Java常見的排序算法

    今天給大家?guī)淼氖顷P于Java的相關知識,文章圍繞著Java常見的排序算法展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Spring?Data?Jpa?中原生查詢?REGEXP?的使用詳解

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

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

    SWT(JFace)體驗之StyledText類

    有的時候Text需要實現這種那種的樣式。先提供在不使用StyledText類的情況:
    2009-06-06
  • Java數據結構之并查集的實現

    Java數據結構之并查集的實現

    并查集是一種用來管理元素分組情況的數據結構。并查集可以高效地進行如下操作。本文將通過Java實現并查集,感興趣的小伙伴可以了解一下
    2022-01-01
  • 帶你快速搞定java多線程(5)

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

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

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

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

    Java判斷字符串回文的代碼實例

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

    Spring?框架的?MethodInterceptor?簡介及示例代碼

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

    Disconf實現分布式配置管理的原理與設計

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

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

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

最新評論

夏邑县| 翼城县| 钦州市| 延庆县| 平塘县| 黑龙江省| 长春市| 潞城市| 宁陕县| 大悟县| 虎林市| 阳西县| 运城市| 五河县| 汉寿县| 常德市| 故城县| 盐津县| 淮安市| 古田县| 定远县| 廊坊市| 神池县| 莒南县| 仁化县| 丰台区| 无棣县| 南陵县| 大港区| 四平市| 台山市| 晋中市| 扬州市| 孝感市| 福州市| 洮南市| 仙桃市| 北京市| 岚皋县| 萍乡市| 介休市|