struts2文件上傳的采用的三種方式解析
文件上傳幾乎是每個項目實現的一個必須的模塊。
上傳就是將信息從個人計算機(本地計算機)傳遞到中央計算機(遠程計算機)系統上,讓網絡上的人都能看到。將制作好的網頁、文字、圖片等發布到互聯網上去,以便讓其他人瀏覽、欣賞。這一過程稱為上傳。
JAVA實現文件上傳的幾個組件:
1 SmartUpload 用的最多的一個組件,已經不再更新了,可以實現上傳和下載
2 FileUpload Apache實現的文件上傳組件,功能齊備
3 J2KUpload java2000實現的文件上傳組件,全部使用內存,適合多個不超過10M的小文件
下面具體說說FileUpload Apache實現的文件上傳組件。
1、/** 按copy方式上傳 */
Java代碼
- public String uploadFile(){
- /**保存的具體路徑*/
- String savepath = getSavePath();
- /**根據保存的路徑創建file對象*/
- File file = new File(savepath);
- if(!file.exists()){
- /**創建此文件對象路徑*/
- file.mkdirs();
- }
- try {
- /**使用的是:org.apache.commons.io.FileUtils FileUtils*/
- FileUtils.copyFile(pic, new File(file,getPicFileName()));
- } catch (IOException e) {
- e.printStackTrace();
- }
- return SUCCESS;
- }
備注:
1、getSavePath()方法中,ServletActionContext().getServletContext().getRealPath
(savePath+"\\"+getPicFileName()); ,這個主要是一個文件的實際路徑
2、我個人認為這種方式是簡單易用的。按copy方式上傳使用的是Apache公司的
org.apache.commons.io.FileUtils包里的FileUtils.java。
2、/** 按字節方式上傳 */
Java代碼
- public String uploadFile(){
- /** 文件的寫操作 */
- FileInputStream fis = null;
- FileOutputStream fos = null;
- /** 保存的路徑 */
- String savepath = getSavePath();
- /** 根據保存的路徑創建file對象 */
- File file = new File(savepath);
- /** file對象是否存在 */
- if (!file.exists()) {
- /** 創建此文件對象路徑 */
- file.mkdirs();
- }
- try {
- /** 創建輸入流 */
- fis = new FileInputStream(pic);
- /** 輸出流 更據文件的路徑+文件名稱創建文件對象 */
- fos = new FileOutputStream(file + "//" + getPicFileName());
- /** 讀取字節 */
- byte b[] = new byte[1024];
- int n = 0;
- /** 讀取操作 */
- while ((n = fis.read(b)) != -1) {
- /** 寫操作 */
- fos.write(b, 0, n);
- }
- /** 關閉操作 */
- if (fis != null) {
- fis.close();
- }
- if (fos != null) {
- fos.close();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return SUCCESS;
- }
3、/** 按字符方式上傳 即“三層管道” */
Java代碼
- public String uploadFile(){
- /** 文件的寫操作 */
- BufferedReader br =null;
- BufferedWriter bw = null;
- /** 保存的路徑 */
- String savepath = getSavePath();
- /** 根據保存的路徑創建file對象 */
- File file = new File(savepath);
- /** file對象是否存在 */
- if (!file.exists()) {
- /** 創建此文件對象路徑 */
- file.mkdirs();
- }
- try {
- /** 創建一個BufferedReader 對象*/
- br = new BufferedReader(new InputStreamReader(new FileInputStream
- (pic)));
- bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream
- (file + "//" + getPicFileName())));
- // 讀取字節
- char b[] = new char[1024];
- int n = 0;
- // 讀取操作
- while ((n = br.read(b)) != -1) {
- // 寫操作
- bw.write(b, 0, n);
- }
- // 關閉操作
- if (br != null) {
- br.close();
- }
- if (bw != null) {
- bw.close();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return SUCCESS;
- }
備注:
第二種上傳方式沒有第三種上傳方式效率高。
建議:
***用***種方式上傳,次之使用第三種方式上傳,***再使用第二種方式上傳。