文件的上傳和下載

1甲馋、普通方式

前端代碼

   <form action="UploadServlet" method="post" enctype="Multipart/form-data">
        name:<input type="text" name="sname"><br/>
        age:<input type="text" name="sage"><br/>
        photo:<input type="file" name="sphoto"><br/>
        <input type="submit" value="Submit">
    </form>
    <a href="DownloadServlet?filename=圖片.jpg">Download</a><br/>

后臺(tái)UploadServlet代碼

@WebServlet("/downloadServlet")
public class UploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     //得到上傳文件的保存目錄迄损,將上傳的文件放在webRoot目錄下(但是一般為了安全放在WEB-INF目錄下,不允許外界直接訪問(wèn)痊远,保證上傳的安全)
        String path = this.getServletContext().getRealPath("/upload"); 
        File file = new File(path);
        //判斷上傳文件的保存目錄是否存在
        if(!file.exists() && !file.isDirectory()){
            System.out.println(path + "目錄不存在,需要?jiǎng)?chuàng)建拗引!");
            file.mkdir(); //創(chuàng)建目錄
        }
                request.setCharacterEncoding("utf-8");
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if(isMultipart){
            DiskFileItemFactory factory = new DiskFileItemFactory(1024*10,new File("D:\\temp"));
            ServletFileUpload upload = new ServletFileUpload(factory);
            //upload.setSizeMax(1024*200);
            try {
                List<FileItem> items = upload.parseRequest(request);
                for(FileItem item:items){
                    if(item.isFormField()){
                        System.out.println(item.getFieldName());
                    }else{
                        String filename = item.getName();
                        File file = new File("D:\\upload", filename);
                        item.write(file);
                        System.out.println("上傳成功");
                    }
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}

后臺(tái)DownloadSrvlet代碼

@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        String filename = new String(request.getParameter("filename").getBytes("iso-8859-1"),"utf-8");
        response.addHeader("Content-Type", "application/octet-stream");//二進(jìn)制流矾削,可以下載任何類型,具體可查HTTP Content-Type對(duì)照表
        String agent=request.getHeader("User-agent").toLowerCase();
        if(agent.contains("firefox")){
            response.addHeader("Content-Disposition", "attachment;filename==?UTF-8?B?"+new String(Base64.encodeBase64(filename.getBytes("utf-8")))+"?=");
        }
        if(agent.contains("edge")||agent.contains("chrome")){
            response.addHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename,"utf-8"));
        }else{
            response.addHeader("Content-Disposition", "attachment;filename="+filename);
        }
        InputStream is = getServletContext().getResourceAsStream("/res/"+filename);
        ServletOutputStream os = response.getOutputStream();
        BufferedInputStream bis = new BufferedInputStream(is);
        BufferedOutputStream bos = new BufferedOutputStream(os);
        int data = -1;
        while((data=bis.read())!=-1){
            bos.write(data);
        }
        bos.flush();
        if(bis!=null)
            bis.close();
        if(bos!=null)
            bos.close();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}

2欲间、SpringMVC實(shí)現(xiàn)文件上傳

a.導(dǎo)入commons-fileupload.jar和commons-io.jar
b.在SpringMVC配置文件中配置CommonsMultipartResolver

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UTF-8"></property>
        <!-- 上傳單個(gè)文件的最大值断部,單位Byte;如果-1猎贴,表示無(wú)限制 -->
        <property name="maxUploadSize"  value="102400"></property>
</bean>

c.在controller中編寫(xiě)處理方法

@RequestMapping(value="testUpload") //abc.png   //注意文件的表單是一個(gè)MultipartFile類型的
public String testUpload(@RequestParam("desc") String desc  , @RequestParam("file") MultipartFile file  ) throws IOException {
            System.out.println("文件描述信息:"+desc);
            //jsp中上傳的文件:file
            InputStream is = file.getInputStream();//IO
            String fileName = file.getOriginalFilename();
            OutputStream out = new FileOutputStream("d:\\"+fileName) ;
            byte[] buf = new byte[1024];
            int len = -1;
            while(( len = is.read(buf)) !=-1 ) {
                out.write(bs, 0, len);
            }
            out.close();
            is.close();
            //將file上傳到服務(wù)器中的 某一個(gè)硬盤(pán)文件中
            System.out.println("上傳成功她渴!");
            return "success";
        }

3、HTML實(shí)現(xiàn)文件下載

window.open("url"); //圖片趁耗、xml等文件會(huì)直接在窗口打開(kāi)

//注意使用Idea時(shí)疆虚,放入的靜態(tài)資源可能不能及時(shí)更新到服務(wù)器(out中)
$("#myButton").click(function () {
             // window.open("res/desk.png");
             // window.open("res/web.xml");
            // window.open("res/111.xls");
            //window.location.href = "excelServlet";
            window.location.href = "res/desk.png";
          });

<a href="文件路徑" download="文件名">下載</a>

<a href="/JavaWeb_war_exploded/res/desk.png" download="desk.png">通過(guò)a標(biāo)簽下載文件1</a>
<a href="res/desk.png" download="desk.png">通過(guò)a標(biāo)簽下載文件2</a>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市罢屈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缠捌,老刑警劉巖暗赶,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蹂随,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)岳锁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)咳燕,“玉大人勿决,你說(shuō)我怎么就攤上這事招盲。” “怎么了曹货?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵顶籽,是天一觀的道長(zhǎng)玩般。 經(jīng)常有香客問(wèn)我礼饱,道長(zhǎng),這世上最難降的妖魔是什么镊绪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮帘撰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己核行,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布减余。 她就那樣靜靜地躺著,像睡著了一般位岔。 火紅的嫁衣襯著肌膚如雪堡牡。 梳的紋絲不亂的頭發(fā)上抒抬,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天晤柄,我揣著相機(jī)與錄音,去河邊找鬼。 笑死赚抡,一個(gè)胖子當(dāng)著我的面吹牛纠屋,可吹牛的內(nèi)容都是我干的涂臣。 我是一名探鬼主播售担,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼灼舍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起骑素,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎献丑,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體创橄,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年邦邦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了醉蚁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片燃辖。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡网棍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出滥玷,到底是詐尸還是另有隱情,我是刑警寧澤惑畴,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布如贷,位于F島的核電站豁状,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏泻红。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一讹躯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧潮梯,春花似錦、人聲如沸秉馏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)锉罐。三九已至帆竹,卻和暖如春脓规,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背侨舆。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挨下,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像沥割,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子机杜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348