struts上傳與下載.ppt_第1頁
struts上傳與下載.ppt_第2頁
struts上傳與下載.ppt_第3頁
struts上傳與下載.ppt_第4頁
struts上傳與下載.ppt_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、Struts文件上傳與下載,Struts對文件上傳的支持非常好,它是通過jakarta comons filelupload庫的無縫集成而做到這一點的。,要想使用html表單上傳一個或多個文件,須把表單的enctype屬性設(shè)置為multipart/form-data,把它的method屬性設(shè)置為post. 選擇檔案: 上傳 ,在服務(wù)端不要調(diào)用httpservletrequest對象的getWriter方法。正確的做法是調(diào)用httpservletrequest對象的getinputstream方法。,然后解析getinputstream方法返回的對inputstream對象來檢索出上傳的文件。這

2、是一個比較麻煩的又容易出錯的任務(wù)。但幸好我們有jakarta commons庫來幫忙,struts已經(jīng)集成了這個庫,在struts中實現(xiàn)它比較容易。 基本上:把它們保存在應(yīng)用程序有寫權(quán)限的任何目錄中都可以。把上傳文件保存在web-inf目錄下有這樣的一個好處:即便別人能夠正確地猜出它們的url地址,也不能下載它們. 如果你想把上傳來的文件保存到應(yīng)用程序的安裝目錄中,servletcontext接口的getrealpath方法將非常有用。 Servelt.getrealpath(“/”) Servelt.getrealpath(“/web-inf”) Notice that:如果應(yīng)用程序是一個以

3、war或jar文件的形式部署,你將無法把文件保存到它的安裝目錄去,這是因為servlet容器視為安裝目錄的地方其實是一個war或jar文件。,public class UploadAction extends Action public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception UploadForm fileForm = (UploadForm) form; For

4、mFile file = fileForm.getFile(); FileOutputStream fileOutput = new FileOutputStream(/home/caterpillar/files/ + file.getFileName(); fileOutput.write(file.getFileData(); fileOutput.flush(); fileOutput.close(); return mapping.findForward(success); ,public class FileUploadForm extends ActionForm /* * */

5、 private static final long serialVersionUID = 1L; private FormFile file; private String fname; private String size; public FileUploadForm() public FormFile getFile() return this.file; public void setFile(FormFile f) this.file = f; ,FormFile類提供的方法,public ActionForward execute(ActionMapping mapping, A

6、ctionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception AttachmentForm attachmentForm = (AttachmentForm) form; if (attachmentForm!=null) String description = attachmentForm.getDescription(); System.out.println(Description: + description); FormFile formFile = attach

7、mentForm.getFormFile(); if (formFile!=null) byte bytes = formFile.getFileData(); ServletContext servletContext = getServlet().getServletContext(); String savePath = servletContext.getRealPath(/WEB-INF); String fileName = formFile.getFileName(); File uploadedFile = new File(savePath, fileName); Rando

8、mAccessFile raf = new RandomAccessFile(uploadedFile, rw); raf.write(bytes); raf.close(); return (mapping.findForward(success); ,文件下載,在某些應(yīng)用程序中,我們可能需要把一個文件動態(tài)地發(fā)送到用戶的browser中去,但這個文件的名字和存放位置在編程時可能無法預(yù)知,比如一個產(chǎn)品search表單中,如果不是從表中讀出其存放位置的話。 再如你可能有一些圖片不想讓其它網(wǎng)站引用,辦法只有一個,檢查每個請求中的referer首部,如果referer首部表明請求是來自其他網(wǎng)站的頁面

9、,就不允許這個頁面下載你的資源. 有些我們可以作用操作系統(tǒng)或web容器提供的身份驗證系統(tǒng)來核查用戶的身份。這類身份驗證機(jī)制可以讓程序員用一個password來保護(hù)有關(guān)的文件等等。,把一個文件發(fā)送給browser程序員要完成幾個step 1:把http響應(yīng)中的contenttype首部設(shè)置為下載文件的內(nèi)容類型. Contenttype首部的作用表明數(shù)據(jù)包的數(shù)據(jù)是什么類型,它是由一個多媒體類型和一個子類型標(biāo)識符構(gòu)成。在網(wǎng)址/assignments/media-types處可以查到其相關(guān)的完整清單。 如果不清楚下載文件的內(nèi)容類型或者讓browser總是顯示一個sa

10、ve as對話框,你可以相應(yīng)的contenttype首部設(shè)置為appllication/octet-stream,這個值不區(qū)分大小寫。 2:在http響應(yīng)中加一個content-disposition的首部并把它設(shè)置為attachment;filename=theFileName。這里的thefilename是將顯示在文件下載對話框中的default文件名。它通常就是下載文件的名字,但并非必須如此.,如下代碼可以把一個給定的文件發(fā)送到browser FileInputStream fis = new FileInputStream(file); BufferedInputStream bis

11、= new BufferedInputStream(fis); byte bytes = new bytebis.available(); response.setContentType(contentType); OutputStream os = response.getOutputStream(); bis.read(bytes); os.write(bytes); 首先,通過一個fileinputstream對象讀取給定文件并把它的內(nèi)容加載到一個字符數(shù)組中,然后檢索出httpservletresponse對象中的outputstream對象并調(diào)用后者的write方法把那個字符數(shù)組發(fā)送出

12、去. 除下載文件本身的內(nèi)容外,不要加入額外任何字符,但這種事可能會在你根本不在意的情況下發(fā)生。如: 這里面就有問題,因為有一個回車符 這樣寫雖然有點怪,但很有用.,demo, Click this button to search products. Search Search Results Name Picture ,public class SearchProductAction extends Action public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest re

13、quest, HttpServletResponse response) ArrayList productList = new ArrayList(); productList.add(new ProductTO(1,Television); productList.add(new ProductTO(2,Computer); productList.add(new ProductTO(3,VCR); request.setAttribute(productList, productList); return (mapping.getInputForward(); ,public Actio

14、nForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) String contentType = image/gif; String id = request.getParameter(productId); String path = request.getSession().getServletContext().getRealPath(images); /The images can be jpg or gif, r

15、etrieve default image if no file found File file = new File(path, id + .GIF); if (!file.exists() file = new File(path, id + .JPG); contentType = “image/jpeg”;/如果沒有g(shù)if,嘗試檢索一個jpg文件. if (file.exists() try FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream

16、(fis); byte bytes = new bytebis.available(); response.setContentType(contentType); OutputStream os = response.getOutputStream(); bis.read(bytes); os.write(bytes);/在execute方法中經(jīng)以一個輸出流發(fā)送出去。 catch (IOException ex) System.out.println (ex.toString(); return null; ,package app17b.form; import org.apache.struts.action.ActionForm; public final class ProductSearchCriteriaForm extends ActionForm private int id; private String name; public int ge

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論