<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    athrunwang

    紀(jì)元
    數(shù)據(jù)加載中……
    Java 下載支持?jǐn)帱c(diǎn)續(xù)傳

    [代碼] [Java]代碼,服務(wù)器端實(shí)現(xiàn)

    File file = new File(location);                        
                            if (file.exists()) {                                        
                                long p = 0;
                                long fileLength;
                                fileLength = file.length();
                                
                                // get file content
                                InputStream ins = new FileInputStream(file);
                                bis = new BufferedInputStream(ins);                            
                                
                                // tell the client to allow accept-ranges
                                response.reset();
                                response.setHeader("Accept-Ranges", "bytes");
                                
                                // client requests a file block download start byte
                                if (request.getHeader("Range") != null) {                                
                                    response.setStatus(javax.servlet.http.HttpServletResponse.SC_PARTIAL_CONTENT);
                                    p = Long.parseLong(request.getHeader("Range")
                                            .replaceAll("bytes=", "")
                                            .replaceAll("-", "")
                                            );                                
                                }
                                // support multi-threaded download
                                // respone format:
                                // Content-Length:[file size] - [client request start bytes from file block]
                                response.setHeader("Content-Length", new Long(fileLength - p).toString());
                                
                                if (p != 0) {
                                    // 斷點(diǎn)開(kāi)始
                                    // 響應(yīng)的格式是:
                                    // Content-Range: bytes [文件塊的開(kāi)始字節(jié)]-[文件的總大小 - 1]/[文件的總大小]
                                    String contentRange = new StringBuffer("bytes ")
                                            .append(new Long(p).toString())
                                            .append("-")
                                            .append(new Long(fileLength - 1).toString())
                                            .append("/")
                                            .append(new Long(fileLength).toString())
                                            .toString();
                                    response.setHeader("Content-Range", contentRange);
                                    // pointer move to seek
                                    bis.skip(p);
                                }
                                
                                String fileName = file.getName();
                                response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
                                             
                                while ((size = bis.read(buf)) != -1) {
                                    response.getOutputStream().write(buf,0,size);
                                    response.getOutputStream().flush();                                
                                }
                                bis.close();

    [代碼] 客戶端下載測(cè)試

    public class TestDownload {

        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            HttpURLConnection httpURLConnection = null;
            URL url = null;
            BufferedInputStream bis = null;
            byte[] buf = new byte[10240];
            int size = 0;
            String fileName = "aaa.zip";
            String filePath = "C:\\Users\\Desktop";
            String remoteUrl = "http://127.0.0.1:8080/down.zip";

            // 檢查本地文件
            RandomAccessFile rndFile = null;
            File file = new File(filePath + "\\" + fileName);
            long remoteFileSize = getRemoteFileSzie(remoteUrl);
            long nPos = 0;
           
            if (file.exists()) {                       
                long localFileSzie = file.length();
                if (localFileSzie < remoteFileSize) {                   
                    System.out.println("文件續(xù)傳...");
                    nPos = localFileSzie;
                } else {
                    System.out.println("文件存在,重新下載...");
                    file.delete();
                    try {
                        file.createNewFile();
                    } catch (Exception e) {
                        // TODO: handle exception
                        e.printStackTrace();
                    }   
                }
               
            } else {
                // 建立文件
                try {
                    file.createNewFile();
                } catch (Exception e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }           
            }
           
            // 下載文件
            try {
                url = new URL(remoteUrl);       
                httpURLConnection = (HttpURLConnection)url.openConnection();
                // 設(shè)置User-Agent
                httpURLConnection.setRequestProperty("User-Agent", "Net");
                // 設(shè)置續(xù)傳開(kāi)始
                httpURLConnection.setRequestProperty("Range", "bytes=" + nPos + "-");
                // 獲取輸入流
                bis = new BufferedInputStream(httpURLConnection.getInputStream());           
                rndFile = new RandomAccessFile(filePath + "\\" + fileName, "rw");
                rndFile.seek(nPos);
                int i = 0;
                while ((size = bis.read(buf)) != -1) {
                    //if (i > 500) break;               
                    rndFile.write(buf, 0, size);
                   
                    i++;
                }
                System.out.println("i=" + i);
                httpURLConnection.disconnect();
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }

        public static long getRemoteFileSzie(String url) {
            long size = 0;
            try {
                HttpURLConnection httpUrl = (HttpURLConnection)(new URL(url)).openConnection();
                size = httpUrl.getContentLength();
                httpUrl.disconnect();           
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            return size;
        }
    }

    posted on 2012-01-02 17:31 AthrunWang 閱讀(462) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 日本特黄特黄刺激大片免费| 亚洲冬月枫中文字幕在线看| 成年美女黄网站18禁免费| 国产一级在线免费观看| 亚洲欧美日韩自偷自拍| 亚洲经典在线中文字幕| 亚洲综合色婷婷七月丁香| 国产日产成人免费视频在线观看| 7x7x7x免费在线观看| A级毛片高清免费视频在线播放| 国产亚洲精品免费| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 中文字幕久久亚洲一区| 四虎免费在线观看| 香蕉97超级碰碰碰免费公| 久久99精品视免费看| 中文日本免费高清| 一级日本高清视频免费观看| 亚洲精品久久久久无码AV片软件| 亚洲午夜成激人情在线影院| 91亚洲国产在人线播放午夜 | 999zyz**站免费毛片| 免费人成又黄又爽的视频在线电影| 四虎必出精品亚洲高清| 亚洲自国产拍揄拍| 91亚洲国产成人久久精品| 亚洲色图.com| 亚洲最大黄色网站| 亚洲黄色片在线观看| 久久久久亚洲AV无码永不| 亚洲第一福利视频| 久久久无码精品亚洲日韩按摩| 亚洲αv久久久噜噜噜噜噜| 亚洲爆乳精品无码一区二区三区| 中文字幕一精品亚洲无线一区| 亚洲第一区精品观看| 亚洲精品国产高清嫩草影院| 国产偷国产偷亚洲高清日韩| 亚洲午夜av影院| 亚洲尤码不卡AV麻豆| 久久精品国产亚洲夜色AV网站|