JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Servlet/JSP 討論區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [精華]
JiaYun



版主

發文: 761
積分: 9
於 2003-07-02 01:49 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
browser 大大有

利用 Oreilly MultiPartRequest 做的範例n
http://www.javaworld.com.tw/Old/High/Upload.htm

利用 jspsmart SmartUpload 做的範例n
http://www.javaworld.com.tw/Old/High/S_Upload.htm

Jakarta 當然也不能缺席嘛, 來個利用 Jakarta Commons FileUpload 做的範例 Tongue

都是拿 browser 大大的東西來改的, 所以 File.html 拿這裡的就對了 Big Smile

http://www.javaworld.com.tw/Old/High/Upload.htm

也請參閱 jini 葛格的電子報

http://mychannel.pchome.com.tw/channel/class/class_paper_open.htm?d=2003-07-04&e=jakarta&t=.htm&j=17&f=main&v=1

解決了有些瀏覽器會傳送 path + filename 的問題

在電子報這行

// 因為不同的瀏覽器會造成傳遞 path + filename, 有些則只有 filename

註解下就是 jini 葛格加的程式碼

File.jsp (2.36k)


JiaYun edited on 2003-07-23 23:50
reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
jini

SoftLeader Taiwan

版主

發文: 1266
積分: 23
於 2003-07-02 02:07 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
為何 struts 1.1 要等 Commons-FileUpload 1.0 呢

因為 struts 有一個 subpackage 叫做 org.apache.struts.upload.*;
這裡面就是設定相關的 file 格式
如果你使用 struts 為 MVC Framework
就可以參考 example 中的 struts-upload.war 的開發

(1) 建立 upload.jsp
1
2
3
4
<html:form action="upload.do?queryParam=Successful" enctype="multipart/form-data">
檔案敘述:<html:text property="theText" /><br>
選擇檔案:<html:file property="theFile" /><br>
</html:form>


(2) 建立 UploadForm.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class UploadForm extends ActionForm
{
..........
     public String getTheText() {
        return theText;
    }
    public void setTheText(String theText) {
        this.theText = theText;
    }
    public FormFile getTheFile() {
        return theFile;
    }
 
    public void setTheFile(FormFile theFile) {
        this.theFile = theFile;
    }
 
..........
}


請注意 FormFile 是建立在 org.apache.struts.upload 這個 package 中的

(3) 撰寫 UploadAction
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    public ActionForward execute(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)
{
        UploadForm theForm = (UploadForm) form;
        String text = theForm.getTheText();
        FormFile file = theForm.getTheFile();
        String fileName= file.getFileName();
        String contentType = file.getContentType();
        String size = (file.getFileSize() + " bytes");
        .... // 看你要如何處理
        .... // 可以用 InputStream 取得 file.getInputStream 等等
 
        return mapping.findForward("ThePageYouWannaGo");
}


(4) 建立 struts-config.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  <form-beans>
    <form-bean      name="uploadForm"
                    type="org.apache.struts.webapp.upload.UploadForm"/>
  </form-beans>
 
  <action-mappings>
    <!-- Upload Action -->
    <action    path="/upload"
               type="org.apache.struts.webapp.upload.UploadAction"
               name="uploadForm"
              scope="request"
              input="/upload.jsp">
        <forward name="display" path="/display.jsp" />
   </action>

詳細內容請下載 struts 1.1 src 查閱內容


jini edited on 2003-07-02 02:10
reply to postreply to post
My fans-page on Facebook (welcome join it )
https://www.facebook.com/EnterpriseJava
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
bellenion





發文: 7
積分: 0
於 2003-08-08 16:23 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
問個蠢問題><....

我去Oreilly 下載最新的package "cos-05Nov2002.zip", 解壓縮後成classes, doc 等四個資料夾, 以及upload.war 等三個檔, 並全放在我Tomcat 網站目錄的WEB-INF 裡, 例如我網站目錄是\rh, 我便是將這些檔放在 C:\Program Files\Apache Group\Tomcat 4.1\webapps\rh\WEB-INF\裡.

結果compile顯然 完全沒抓到這個package><

可不可以指點一下... 謝謝


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
popcorny

Jakarta 2%

版主

發文: 752
積分: 20
於 2003-08-08 16:33 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
不用解開
直接把.zip放在/WEB-INF/lib裡面即可


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
rex_lo





發文: 8
積分: 0
於 2003-08-11 18:14 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
還是不行耶...是不是還要設classpath啊?

reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:rex_lo]
browser

戀香

版主

發文: 3570
積分: 1
於 2003-08-11 18:19 user profilesend a private message to usersend email to browserreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
rex_lo wrote:
還是不行耶...是不是還要設classpath啊?


啥叫不行 ????
說清楚吧 .....

ps.我猜你沒 restart container ...


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
rex_lo





發文: 8
積分: 0
於 2003-08-12 09:31 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
真的灰常sorry...沒說清楚
我的意思是我把zip檔放在lib裡沒有用,改把cos.jar檔放進去就
可以run了,上傳成功那一刻真是感動....感謝大家的幫忙!


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
ljf0030



發文: 0
積分: 0
於 2003-08-12 13:36 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我遇到一個問題 ,我有在 struts-config.xml 試過用 DynaActionForm 上傳一個檔案是可以的
<form-beans>
<form-bean name="ActionForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="filename" type="org.apache.struts.upload.FormFile"/>
<form-property name="text" type="java.lang.String[ ]" size ="2" />
</form-beans>
上面是可以的.
但是 如果是兩個檔案
<form-beans>
<form-bean name="ActionForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="filename" type="org.apache.struts.upload.FormFile[ ]" size="2"/>
<form-property name="text" type="java.lang.String[ ]" size = "2" />
</form-beans>
當然在 Action 也要有變數接 upload.FormFile[ ], 和 java.lang.String[ ]
但是在 submit 時就不行.會出現錯誤 javax.servlet.ServletException: BeanUtils.populate.
有哪位大大可以分享一下如何用 FormFile 上傳多個檔案嗎 ? 我以前用 jspsmart 是可以同時多個檔案上傳的. 謝謝.


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
bellenion





發文: 7
積分: 0
於 2003-08-13 23:42 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
感謝大家...不過還是行不通哩

現在我的WEB-INF\lib\ 裡有cos.jar 和cos-05Nov2002.zip, 不過執行File.jsp 還是會出現原先的錯誤

請問要設Classpath 嗎? 若需要的話要怎麼設?

謝謝!


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
keroto





發文: 13
積分: 0
於 2003-08-22 17:36 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我跑不起來 出現這樣的錯誤訊息 , 希望能幫我解答

org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: 29 in the jsp file: /upload/File.jsp

Generated servlet error:
[javac] Compiling 1 source file

C:\Program Files\Apache Group\Tomcat 4.1\work\Standalone\localhost\_\upload\File_jsp.java:108: cannot resolve symbol
symbol : variable FileName
location: class org.apache.jsp.File_jsp
    FileName = multi.getFilesystemName(name);  
^


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
koji

秒速5センチメートル

站長

發文: 8415
積分: 19
於 2003-08-23 11:57 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
old jsptw上面那個範例有個小地方錯誤
原因在於不小心mark掉變數名稱了
妳看了錯誤訊息
應該也知道錯在哪了吧?

koji


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:ljf0030]
magicfish





發文: 209
積分: 3
於 2003-08-25 20:44 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
ljf0030 wrote:
我遇到一個問題 ,我有在 struts-config.xml 試過用 DynaActionForm 上傳一個檔案是可以的
<form-beans>
<form-bean name="ActionForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="filename" type="org.apache.struts.upload.FormFile"/>
<form-property name="text" type="java.lang.String[ ]" size ="2" />
</form-beans>
上面是可以的.
但是 如果是兩個檔案
<form-beans>
<form-bean name="ActionForm" type="org.apache.struts.action.DynaActionForm">
<form-property name="filename" type="org.apache.struts.upload.FormFile[ ]" size="2"/>
<form-property name="text" type="java.lang.String[ ]" size = "2" />
</form-beans>
當然在 Action 也要有變數接 upload.FormFile[ ], 和 java.lang.String[ ]
但是在 submit 時就不行.會出現錯誤 javax.servlet.ServletException: BeanUtils.populate.
有哪位大大可以分享一下如何用 FormFile 上傳多個檔案嗎 ? 我以前用 jspsmart 是可以同時多個檔案上傳的. 謝謝.

上面設定少了</form-bean>,這樣連起動都有問題
看一下官方文件,他們有列表支援的DynaActionForm型態
# java.lang.BigDecimal
# java.lang.BigInteger
# boolean and java.lang.Boolean
# byte and java.lang.Byte
# char and java.lang.Character
# java.lang.Class
# double and java.lang.Double
# float and java.lang.Float
# int and java.lang.Integer
# long and java.lang.Long
# short and java.lang.Short
# java.lang.String
# java.sql.Date
# java.sql.Time
# java.sql.Timestamp
因此才跑不動吧,所以只能分開多作幾個FormFile,別用陣列了


reply to postreply to post
One day,a girl appeared before the boy suddenly.
She said that it was an "angel" about herself.
作者 請問一下檔案上傳可以指定預設目錄嗎? [Re:koji]
f0635





發文: 25
積分: 1
於 2003-09-29 15:10 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
請問一下檔案上傳可以指定預設目錄嗎?

基本上我的當案上傳已經OK了!現在我希望的是,當使用者在使用時,
按下瀏覽的按鈕,我可以讓她先跳到預定的目錄下瀏覽!
比方說按下瀏覽就會先去找C:/upload 目錄!
請問有這樣的設定嗎?
謝謝!


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:ljf0030]
sai





發文: 265
積分: 1
於 2003-10-07 09:12 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
經過這麼久,
不知道有沒有那麼先進已經解決不能同時上傳多個檔案的問題?
能不能分享一下您的心得,謝謝!!
ps. 因為小弟也遇到了這個問題了。
Dead


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:sai]
browser

戀香

版主

發文: 3570
積分: 1
於 2003-10-07 09:34 user profilesend a private message to usersend email to browserreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
sai wrote:
經過這麼久,
不知道有沒有那麼先進已經解決不能同時上傳多個檔案的問題?
能不能分享一下您的心得,謝謝!!
ps. 因為小弟也遇到了這個問題了。
Dead


從頭都尾都可以上傳多個檔案呀
你看第一篇的範例n不就是同時上傳多個檔案嗎

PS. 遇到什麼問題 .. 請說清楚 ...


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
sai





發文: 265
積分: 1
於 2003-10-07 11:03 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
抱歉,沒說清楚,
我用apache的API可以上傳多個檔案沒問題,
可是,我的程式是在 struts 1.1 上開發,
希望從頭到尾都是同樣的架構,
結果遇到了和 ljf0030 完全一樣的問題。


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:sai]
jini

SoftLeader Taiwan

版主

發文: 1266
積分: 23
於 2003-12-17 03:38 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
sai wrote:
抱歉,沒說清楚,
我用apache的API可以上傳多個檔案沒問題,
可是,我的程式是在 struts 1.1 上開發,
希望從頭到尾都是同樣的架構,
結果遇到了和 ljf0030 完全一樣的問題。


Don't use the DynaFormBean ^^" in multi-files uploading programming,


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
GreenDolphin





發文: 7
積分: 0
於 2004-10-12 17:19 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
請問,在linux上執行resin-3.0.8,使用Jakarta Commons FileUpload上傳檔案,可以上傳,但是卻常常發生檔案毀損,無法開啟的問題,請問各位先進有碰過嗎?

reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
rivalhw





發文: 4
積分: 0
於 2005-04-08 11:47 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我也碰到類似問題,我想同時上傳多個附件文檔,但附件個數不定,是由用戶自己連确認上傳的附件個數,用struts可以上傳固定的文檔,但動態的文檔上傳我就沒辦法了,不知各位可否給些思路?

reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
jAy94





發文: 4
積分: 0
於 2005-05-11 10:49 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
關於此部分 補充新增目錄部分 讓程式更完整
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//取得網站實際路徑
String sFile = application.getRealPath("");
 
Iterator iter = items.iterator();
 
int tmp = 0;
FileItem tmpItem = null;
//取得欲上傳目錄
FileItem Ritem;
Ritem = (FileItem)iter.next();
String sfolder = Ritem.getString();
 
//建立存檔目錄
String OS = System.getProperty("os.name").toLowerCase();
File file = new File(sFile + "//Upload//" + sfolder + "//");
if(!file.exists()){
  if(file.mkdir()){
    out.print("建立目錄成功");
  }
}
if ((OS.indexOf("nt") > -1) || (OS.indexOf("windows 2000") > -1) || (OS.indexOf("windows xp") > -1)) {
   //Windows  無須改變
} else {
   // Unix/Linux  改變權限
   String cmdStr = "chmod 766 " + sFile + "/Upload/" + sfolder + "/";
  Runtime.getRuntime().exec(cmdStr);
}
 
// 宣告將上傳之檔案放置到伺服器的 / .... /Upload 目錄中
String saveDirectory =  file.getPath() ;
 
while (iter.hasNext())
{
 ......
} // end while


jAy94 edited on 2005-05-11 10:54
reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
askstw





發文: 12
積分: 0
於 2005-07-07 10:23 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
請問 我也下載了檔案 將JAR黨放在WEB-INF\lib下面 但是我不知道該怎麼樣用命令提示字元去COMPILE他
還是只要放進去就好了嗎

因為我執行的時候 會抓出許多錯誤
例如
C:\Tomcat\work\Standalone\localhost\_\File_jsp.java:9: package com.oreilly.servlet does not exist
import com.oreilly.servlet.MultipartRequest;
^
C:\Tomcat\work\Standalone\localhost\_\File_jsp.java:68: cannot resolve symbol
symbol : class MultipartRequest
location: class org.apache.jsp.File_jsp
MultipartRequest multi = new MultipartRequest(request , saveDirectory , maxPostSize );
^

An error occurred at line: 28 in the jsp file: /File.jsp

Generated servlet error:
C:\Tomcat\work\Standalone\localhost\_\File_jsp.java:109: cannot resolve symbol
symbol : variable FileName
location: class org.apache.jsp.File_jsp
    FileName = multi.getFilesystemName(name);  

等等 但是我看不出來是哪裡有錯@@


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
askstw





發文: 12
積分: 0
於 2005-07-08 09:56 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
問題解決了@@ 原來是變數抓不到名稱

抱歉 打擾到各位大大了@@


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
hellohi





發文: 1
積分: 0
於 2005-07-09 09:44 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
上传多少个附件如何让用户自己控制

hellohi edited on 2005-07-09 12:01
reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
gemini5068





發文: 1
積分: 0
於 2005-07-12 16:01 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
想請問一下,我用歐萊禮的那個套件的話,儲存的目錄路徑不能用相對路徑嗎??像這樣的宣告就可以:String saveDirectory = "C:\\Tomcat4\\webapps\\Pop\\techBook\\";
那如果只想用相對路徑的話應該要怎麼宣告才對啊?


reply to postreply to post
作者 Re:檔案上傳 JSP 小範例 (使用 Jakarta Commons FileUpload) [Re:JiaYun]
kidtoy





發文: 37
積分: 0
於 2005-10-09 17:32 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我下載了File.jsp的範例程式丫,可是為什麼compile到以下第三行,就會出現exception,請問一下,request,這行變數是什麼呢,我該怎樣修改才對呢?

// 設定暫存目錄
upload.setRepositoryPath(tmpDirectory);
List /* FileItem */ items = upload.parseRequest(request);


reply to postreply to post
go to first page go to previous page  1   2  go to next page go to last page
» JWorld@TW »  Servlet/JSP 討論區

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8