1. 程式人生 > >通過連結下載檔案並儲存到本地

通過連結下載檔案並儲存到本地

      在做微信的圖片上傳的時候,發現上傳的是臨時素材,我們需要從微信伺服器下載圖片並儲存到本地,所以涉及的就是通過連結下載檔案並儲存到本地的方法。

通過url下載的過程有如下幾步:

(1)客戶端發起一個url請求,獲取連線物件。

(2)伺服器解析url,並且將指定的資源返回一個輸入流給客戶。

(3)建立儲存的目錄以及儲存的檔名。

(4)輸出了寫資料。

(5)關閉輸入流和輸出流

完整程式碼:

/**
     * @功能 下載臨時素材介面
     * @param filePath 檔案將要儲存的目錄
     * @param method 請求方法,包括POST和GET
     * @param url 請求的路徑
     * @return
     */

    public static String saveUrlAs(String url,String filePath,String method) throws Exception {
        //System.out.println("fileName---->"+filePath);
        //建立不同的資料夾目錄
        File file=new File(filePath);
        //判斷資料夾是否存在
        if (!file.exists())
        {
            //如果資料夾不存在,則建立新的的資料夾
            file.mkdirs();
        }
        FileOutputStream fileOut = null;
        HttpURLConnection conn = null;
        InputStream inputStream = null;
        String savePath = null ;
        try
        {
            // 建立連結
            URL httpUrl=new URL(url);
            conn=(HttpURLConnection) httpUrl.openConnection();
            //以Post方式提交表單,預設get方式
            conn.setRequestMethod(method);
            conn.setDoInput(true);
            conn.setDoOutput(true);
            // post方式不能使用快取
            conn.setUseCaches(false);
            //連線指定的資源
            conn.connect();
            //獲取網路輸入流
            inputStream=conn.getInputStream();
            BufferedInputStream bis = new BufferedInputStream(inputStream);
            //判斷檔案的儲存路徑後面是否以/結尾
            if (!filePath.endsWith("/")) {

                filePath += "/";

            }
            String filePathDir =  DateUtil.getStringAllDate();
            //寫入到檔案(注意檔案儲存路徑的後面一定要加上檔案的名稱)
            savePath = filePath+filePathDir+".png";
            fileOut = new FileOutputStream(savePath);
            BufferedOutputStream bos = new BufferedOutputStream(fileOut);

            byte[] buf = new byte[4096];
            int length = bis.read(buf);
            //儲存檔案
            while(length != -1)
            {
                bos.write(buf, 0, length);
                length = bis.read(buf);
            }
            bos.close();
            bis.close();
            conn.disconnect();
        } catch (Exception e)
        {
            e.printStackTrace();
            throw new  Exception(e.getMessage());
        }

        return savePath;

    }

傳入的filePath是路徑名,加上後面的filePathDir+".png" 獲得的 savePath是檔案儲存地址