<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)開始
                                    // 響應(yīng)的格式是:
                                    // Content-Range: bytes [文件塊的開始字節(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();

    [代碼] 客戶端下載測試

    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ù)傳開始
                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)航:
     
    主站蜘蛛池模板: 美女免费精品高清毛片在线视| 国产AV无码专区亚洲Av| 国产亚洲玖玖玖在线观看| 巨波霸乳在线永久免费视频| 久久精品亚洲综合专区| 野花香高清视频在线观看免费| 国产综合精品久久亚洲| 本免费AV无码专区一区| 亚洲AV永久无码精品| 久久这里只精品热免费99| 色拍自拍亚洲综合图区| 国产男女爽爽爽爽爽免费视频| 亚洲欧洲日本天天堂在线观看| 日本免费网站视频www区| 亚洲国产成人精品无码区在线网站| 日韩不卡免费视频| 亚洲国产成人手机在线观看| 国产免费69成人精品视频| 一级看片免费视频囗交| 亚洲国产第一站精品蜜芽| 99久在线国内在线播放免费观看| 亚洲精品美女在线观看| 日本免费一区二区三区最新vr| 美女免费视频一区二区三区| 亚洲精品无码久久久影院相关影片| 日韩精品免费视频| 中文字幕无码亚洲欧洲日韩| 亚洲精品成人在线| 最近更新免费中文字幕大全| 亚洲福利视频网址| 又粗又大又长又爽免费视频| 13小箩利洗澡无码视频网站免费| 久久久久亚洲精品日久生情| 免费无码又爽又刺激毛片| 精品国产污污免费网站入口在线| 久久久久亚洲AV成人片| 国产成人高清精品免费鸭子| 日本三级在线观看免费| 亚洲综合中文字幕无线码| 亚洲人成77777在线播放网站| 成人浮力影院免费看|