java.net.URL請求遠程檔案下載

來源:互聯網
上載者:User

標籤:

 

1:瀏覽器請求下載

    public void listStockcodeUplaod(HttpServletRequest req,            HttpServletResponse res) throws Exception {        String urlPath = req.getParameter("url");        String name = req.getParameter("name");        URL url = new URL(urlPath);        HttpURLConnection conn = (HttpURLConnection) url.openConnection();        // 設定逾時間為3秒        conn.setConnectTimeout(10 * 1000);        // 防止屏蔽程式抓取而返回403錯誤        // conn.setRequestProperty("User-Agent",        // "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");        // 得到輸入資料流        InputStream inputStream = conn.getInputStream();        // 擷取自己數組        byte[] getData = new byte[1024];        int len = 0;        ByteArrayOutputStream bos = new ByteArrayOutputStream();        while ((len = inputStream.read(getData)) != -1) {            bos.write(getData, 0, len);        }        bos.close();        getData = bos.toByteArray();        // 以流的形式下載檔案。        // byte[] buffer = new byte[fis.available()];        inputStream.read(getData);        inputStream.close();        // 清空response        res.reset();        // 設定response的Header        res.addHeader("Content-Disposition", "attachment;filename=sss.pdf");        res.addHeader("Content-Length", "" + getData.length);        OutputStream toClient = new BufferedOutputStream(res.getOutputStream());        res.setContentType("application/octet-stream");        toClient.write(getData);        toClient.flush();        toClient.close();        System.out.println("info:" + url + " download success");    }

 

2.同上

    public HttpServletResponse download(String path, HttpServletResponse response) {        try {            // path是指欲下載的檔案的路徑。            File file = new File(path);            // 取得檔案名稱。            String filename = file.getName();            // 取得檔案的尾碼名。            String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();            // 以流的形式下載檔案。            InputStream fis = new BufferedInputStream(new FileInputStream(path));            byte[] buffer = new byte[fis.available()];            fis.read(buffer);            fis.close();            // 清空response            response.reset();            // 設定response的Header            response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));            response.addHeader("Content-Length", "" + file.length());            OutputStream toClient = new BufferedOutputStream(response.getOutputStream());            response.setContentType("application/octet-stream");            toClient.write(buffer);            toClient.flush();            toClient.close();        } catch (IOException ex) {            ex.printStackTrace();        }        return response;    }    public void downloadLocal(HttpServletResponse response) throws FileNotFoundException {        // 下載本地檔案        String fileName = "Operator.doc".toString(); // 檔案的預設儲存名        // 讀到流中        InputStream inStream = new FileInputStream("c:/Operator.doc");// 檔案的存放路徑        // 設定輸出的格式        response.reset();        response.setContentType("bin");        response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");        // 迴圈取出流中的資料        byte[] b = new byte[100];        int len;        try {            while ((len = inStream.read(b)) > 0)                response.getOutputStream().write(b, 0, len);            inStream.close();        } catch (IOException e) {            e.printStackTrace();        }    }    public void downloadNet(HttpServletResponse response) throws MalformedURLException {        // 下載網路檔案        int bytesum = 0;        int byteread = 0;        URL url = new URL("windine.blogdriver.com/logo.gif");        try {            URLConnection conn = url.openConnection();            InputStream inStream = conn.getInputStream();            FileOutputStream fs = new FileOutputStream("c:/abc.gif");            byte[] buffer = new byte[1204];            int length;            while ((byteread = inStream.read(buffer)) != -1) {                bytesum += byteread;                System.out.println(bytesum);                fs.write(buffer, 0, byteread);            }        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }

 

 

3.支援線上開啟檔案的一種方式

 public void downLoad(String filePath, HttpServletResponse response, boolean isOnLine) throws Exception {        File f = new File(filePath);        if (!f.exists()) {            response.sendError(404, "File not found!");            return;        }        BufferedInputStream br = new BufferedInputStream(new FileInputStream(f));        byte[] buf = new byte[1024];        int len = 0;        response.reset(); // 非常重要        if (isOnLine) { // 線上開啟檔案            URL u = new URL("file:///" + filePath);            response.setContentType(u.openConnection().getContentType());            response.setHeader("Content-Disposition", "inline; filename=" + f.getName());            // 檔案名稱應該編碼成UTF-8        } else { // 純下載方式            response.setContentType("application/x-msdownload");            response.setHeader("Content-Disposition", "attachment; filename=" + f.getName());        }        OutputStream out = response.getOutputStream();        while ((len = br.read(buf)) > 0)            out.write(buf, 0, len);        br.close();        out.close();    }

 

 

4 url下載到本地

/**      * 從網路Url中下載檔案      * @param urlStr      * @param fileName      * @param savePath      * @throws IOException      */      public static void  downLoadFromUrl(String urlStr,String fileName,String savePath) throws IOException{          URL url = new URL(urlStr);            HttpURLConnection conn = (HttpURLConnection)url.openConnection();                    //設定逾時間為3秒          conn.setConnectTimeout(3*1000);          //防止屏蔽程式抓取而返回403錯誤          conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");            //得到輸入資料流          InputStream inputStream = conn.getInputStream();            //擷取自己數組          byte[] getData = readInputStream(inputStream);                //檔案儲存位置          File saveDir = new File(savePath);          if(!saveDir.exists()){              saveDir.mkdir();          }          File file = new File(saveDir+File.separator+fileName);              FileOutputStream fos = new FileOutputStream(file);               fos.write(getData);           if(fos!=null){              fos.close();            }          if(inputStream!=null){              inputStream.close();          }              System.out.println("info:"+url+" download success");         }            /**      * 從輸入資料流中擷取位元組數組      * @param inputStream      * @return      * @throws IOException      */      public static  byte[] readInputStream(InputStream inputStream) throws IOException {            byte[] buffer = new byte[1024];            int len = 0;            ByteArrayOutputStream bos = new ByteArrayOutputStream();            while((len = inputStream.read(buffer)) != -1) {                bos.write(buffer, 0, len);            }            bos.close();            return bos.toByteArray();        }          public static void main(String[] args) {          try{              downLoadFromUrl("http://101.95.48.97:8005/res/upload/interface/apptutorials/manualstypeico/6f83ce8f-0da5-49b3-bac8-fd5fc67d2725.png",                      "百度.jpg","d:/resource/images/diaodiao/country/");          }catch (Exception e) {              // TODO: handle exception          }      } 

 

java.net.URL請求遠程檔案下載

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.