<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)航:
     
    主站蜘蛛池模板: 免费夜色污私人影院网站| 光棍天堂免费手机观看在线观看| 丝瓜app免费下载网址进入ios| 国产成人高清精品免费鸭子| 自拍偷区亚洲国内自拍| 美女黄网站人色视频免费| 中文字幕免费在线播放| 中文亚洲成a人片在线观看| 一级毛片人与动免费观看| 亚洲精品国产成人影院| 亚洲国产av美女网站| 黄色网页免费观看| 四虎国产精品免费久久影院| 四虎永久成人免费| 美女黄网站人色视频免费| 亚洲XX00视频| 亚洲人成高清在线播放| av免费不卡国产观看| 亚洲AV永久无码区成人网站| 国产区图片区小说区亚洲区| 久久国产精品成人片免费| 亚洲视频在线一区| 中文在线免费观看| 久久精品亚洲中文字幕无码网站 | 亚洲成人午夜在线| 最近最好最新2019中文字幕免费 | 四虎亚洲精品高清在线观看| 日韩免费视频播播| 中文字幕无码免费久久9一区9| 91在线精品亚洲一区二区| 嫩草影院免费观看| 亚洲精品成人久久| 13小箩利洗澡无码视频网站免费| 亚洲激情黄色小说| 国产免费卡一卡三卡乱码| 日韩精品无码免费专区午夜| 亚洲国产美女精品久久| 无码av免费毛片一区二区| 精品亚洲国产成人av| 久久精品国产96精品亚洲| 免费视频中文字幕|