java 通过url地址下载

问题描述

java 通过url地址下载

public static void downloadHttpFile(String sURL,String folder, String sFilePath){
try {
// HttpServletResponse response = null;
// response.setHeader( "Content-Disposition", "attachment;filename=" + new String( sURL.getBytes("UTF-8"), "ISO8859-1" ) );
int nStartPos = 0;
int nRead = 0;

        URL url = new URL(sURL);

        HttpURLConnection.setFollowRedirects(false);
        HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();

        httpConnection.setRequestMethod("HEAD");
        long nEndPos = getFileSize(sURL);

// File file = new File(folder);
// file.mkdir();

        RandomAccessFile oSavedFile = new RandomAccessFile(folder+sFilePath, "rw");
        httpConnection.setRequestProperty("User-Agent", "Internet Explorer");
        String sProperty = "bytes=" + nStartPos + "-";
        httpConnection.setRequestProperty("RANGE", sProperty);
        //System.out.println(sProperty);
        InputStream input = httpConnection.getInputStream();

// ByteArrayOutputStream outStream = new ByteArrayOutputStream();

byte[] b = new byte[4*1024];

        while ((nRead = input.read(b, 0, 1024)) > 0 && nStartPos < nEndPos ) {//((length = in.read(b, offset, 1024)) != -1)
            oSavedFile.write(b, 0, nRead);
            nStartPos += nRead;
        }
        oSavedFile.close();
        httpConnection.disconnect();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

/**
 * 获取文件大小
 * @param sURL
 * @return
 */
public static long getFileSize(String sURL) {
    int nFileLength = -1;
    try {
        String newUrl1 = sURL.substring(0,sURL.lastIndexOf("/")+1);
        String newUrl2 = sURL.substring(sURL.lastIndexOf("/")+1);
        String newurl = newUrl1 + URLEncoder.encode(newUrl2, "UTF-8");
        URL url = new URL(newurl);
        HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
        httpConnection.setRequestProperty("User-Agent", "Internet Explorer");
        httpConnection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt;NetFox)");
        long connSize = httpConnection.getContentLength();
        long responseCode = httpConnection.getResponseCode();
        httpConnection.getInputStream();
        if (responseCode >= 400) {
            System.err.println("Error Code : " + responseCode);
            return -2; // -2 represent access is error
        }

        String sHeader;
        for (int i = 1;; i++) {
            sHeader = httpConnection.getHeaderFieldKey(i);
            if (sHeader != null) {
                if (sHeader.equals("Content-Length")) {
                    nFileLength = Integer.parseInt(httpConnection.getHeaderField(sHeader));
                    break;
                }
            } else
                break;
        }
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }

    //System.out.println(nFileLength);
    return nFileLength;
}

这是我下载文件的代码。
测试url我获取的文件长度是4.7K下载下来文件格式受损,无法打开,我通过右键-另存为文件大小为28K。是不是我的获取文件大小错误了。我已经找了很多方法。都不管用,求大神帮我看看这是什么原因。

解决方案

java URL下载(百度知道)
Java获取URL地址图片
Java根据Url下载图片

解决方案二:

制作一个特别格式的测试文件,下载后再对比,用双文件HEX比较工具查问题吧。
比如以512字节为一块,全部放字符"A",下一块放字符"B",依此类推。

时间: 2024-12-04 22:30:33

java 通过url地址下载的相关文章

Flash AS学习:LoadVars.load由指定的URL地址下载数据

数据|下载 功能说明 由指定的URL地址下载数据,并且解析数据的内容,然后将结果存放在loadVarsObject里.所有下载下来的变量内容,都会以Property的形式存放在loadVarsObject里,其变量名称即为该loadVarsObject的Property名称,其内容有大小写之分.因此,任何在loadVarsObject中与下载下来的变量名称同名的Property名称,其内容都将被覆盖,反之则否.这些动作并不是同步发生的. 下载下来的数据,其格式必为符合application/x-

Java 测试URL地址是否能正常连接的代码_java

Java 测试URL地址是否能正常连接 public static int testWsdlConnection(String address) throws Exception { int status = 404; try { URL urlObj = new URL(address); HttpURLConnection oc = (HttpURLConnection) urlObj.openConnection(); oc.setUseCaches(false); oc.setConne

解决java页面URL地址传输参数乱码的方法_java

以下就是为大家分享的URL地址传输参数乱码的解决方法: 1.在tomcat中配置:在tomcat安装目录下面找到conf下面的server.xml找到以下代码段,修改URIEncoding为GBK: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="GBK&q

js-post提交到模态框,无法获取url地址增加的参数

问题描述 post提交到模态框,无法获取url地址增加的参数 使用的bootstrap,新页面在模态框中显示.使用getquerystring无法获取id,显示null,如果直接location.href=地址,可以获得到id.要怎么做呢,url确定附带id了,但是跳转后却没了 解决方案 ajax请求的吧,这样浏览器地址栏当然没有参数,你的getquerystring肯定是通过location.href或者location.search来分析获取参数的,地址栏都没有参数当然获取不到 用全部变量保

java 下载 url-使用java通过URL下载图片不正常

问题描述 使用java通过URL下载图片不正常 http://zcimg.zcool.com.cn/zcimg/m_c6fe5449f86a0000016004e746c6.jpg 第一条地址可以正确下到图片http://www.zcool.com.cn/img.html#src=/zcimg/905054488bb700000160049caba7.jpg 第二条地址下载下来的图片只有1KB且打不开 怀疑是不是#src的问题 下载代码 public static void downloadIm

winform url 显示图片-winform中读取显示URL地址的图片在dgv列表中,并不下载,寻找解决方案

问题描述 winform中读取显示URL地址的图片在dgv列表中,并不下载,寻找解决方案 如果有多张图片就以多列的方式显示图片 解决方案 肯定是要下载的,代码参考http://stackoverflow.com/questions/10759772/how-to-show-image-from-url-in-datagridview-cell

|M| 我在CSDN里面下载了一个DundasWebChart.dll图表控件 但没有示例 哪一位知道哪里有给个URL地址 谢谢

问题描述 我在CSDN里面下载了一个DundasWebChart.dll图表控件但没有示例哪一位知道哪里有给个URL地址谢谢 解决方案 解决方案二:只能帮你顶了.解决方案三:CSDN上的我没用过,不过我们公司提供的是个安装包,安装之后在开始菜单里有个快捷方式组,里面有一系列示例,不过是英文的,你找找看有没有解决方案四:up

java怎么实现类似HTTPWatch的功能,打开url地址后请求的资源

问题描述 java怎么实现类似HTTPWatch的功能,打开url地址后请求的资源 目前很多浏览器都有这样的功能,在地址栏中输入连接后中可以通过httpwatch,清楚的看到此连接已经请求了多少资源(图片,css,js)等等.想问问高手,如何利用java实现,或者说java有没有这种开源的工具. 想实现的功能如图,我在地址栏中输入www.hao123.com后,可以看到它向服务器进行了很多资源的请求.我想知道的如何通过java来获取这些请求资源.

Android中实现下载URL地址的网络资源的实例分享_Android

通过URL来获取网络资源并下载资源简单实例: package com.android.xiong.urltest; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.MalformedURLException; import java.net.URL; import android.app.Activity; import android.gra