public static void downloadNet() throws IOException {
 // 下载网络文件
int bytesum = 0;
 int byteread = 0; //URL url = new URL("windine.blogdriver.com/logo.gif");
URL url = new URL("http://levphon.vicp.cc:8081/sdps/images/404.jpg");
try {
 URLConnection conn = url.openConnection();
 InputStream inStream = null;
 conn.getInputStream();
 FileOutputStream fs = new FileOutputStream("E:/abc.jpg");
 byte[] buffer = new byte[1204*100];
 while ((byteread = inStream.read(buffer)) != -1) {
 bytesum += byteread;
 System.out.println(bytesum);
 fs.write(buffer, 0, byteread);
 }
 } catch (FileNotFoundException e) {
 e.printStackTrace();
 } catch (IOException e) {
 e.printStackTrace();
 }
}
我这有个程序,可以下载那种网上能在线打开并显示在网页上的文件(比如图片),但是如果把url换成那种不能显示在网页的时候就无法下载(比如给一个word文档路径,它会弹出一个下载框,不能把内容显示在网页上),请问怎么解决这问题呀。谁有新的程序也可以发我,万分感谢!!!

解决方案 »

  1.   

    程序本身应该没啥问题,关键是你要下载的word文档的路径,如果做了放盗链啥的,下载难度就很高了。
      

  2.   


    啊 , 不明白哎, 我是要从外网的服务器上下载文件 , 图片和word文件是放在同一目录下面的,图片可以下载, 但是word文档就不能下载。
      

  3.   

    意思就是说,下载Word跟下载图片、CSS、JS 等,从程序的角度来说完全没有任何区别。如果有区别,那么一般来说是其它问题,需要细化分析服务器返回的错误信息和HTTP-HEAD等信息。从调试方便的角度来说,建议楼主你用HttpClient这个开源组件包来写下载,至少输出些服务器返回的错误信息啥的会十分方便。最后,有个小问题:没看到你在finally和fs.close();   但这个不会是影响下载Word的关键。
      

  4.   

    java.net.ProtocolException: Server redirected too many  times (20)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1253)
    at com.gzpia.webservice.serviceAms.test.D2.downloadNet(D2.java:22)
    at com.gzpia.webservice.serviceAms.test.D2.main(D2.java:39)
    这是异常。
      

  5.   

    那下载这个文件可以吗?
    http://www.java.net/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe
    在浏览器中没有显示,是个exe文件,应该与word之类的不能显示的文件类似。我这边的java工具可以下载这个文件,也可以下载你给的那个图片地址——http://levphon.vicp.cc:8081/sdps/images/404.jpg
      

  6.   

    你把你的word下载地址给我,我用我这边的java下载器看一下能下载不。
      

  7.   

    恩 , 这个你看看 ,  http://levphon.vicp.cc:8081/sdps/download_temp/datactrl/一位高人的QTP学习笔记.doc
      

  8.   

    java.net.ProtocolException: Server redirected too many  times (20)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1182)是不是网页有链接跳转?重定向多次
      

  9.   

    下载完毕!你给的那个下载网址包含跳转,添加以下3行代码可以解决:HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();  // 获得连接对象
    urlConn.setFollowRedirects(true);
    urlConn.setInstanceFollowRedirects(false);
    urlConn.connect();   
             
      

  10.   

    感觉这两个设置是同质的,因此设置貌似是矛盾的
    如果是的话,urlConn.setFollowRedirects(true);本来默认就是true
    可能只需要urlConn.setInstanceFollowRedirects(false);
      

  11.   

    谢谢哦 , 我用了哈,提示是成功了,可是我的doc源文里面是有内容的,下载之后就是空的了。
      

  12.   

    网上的说法是:
    In all probability you have entered a redirect loop at the server. The server responds with 303 See other and when Java's URL connection implementation automatically "sees that other", the server responds again with the same response, and so on ad infinitum.It's apparently redirecting in an infinite loop because you don't maintain the user session. The session is usually backed by a cookie. You need to create a CookieManager before you use URLConnection.// First set the default cookie manager.
    CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));// All the following subsequent URLConnections will use the same cookie manager.
    URLConnection connection = new URL(url).openConnection();
    // ...connection = new URL(url).openConnection();
    // ...connection = new URL(url).openConnection();
    // ...看看setCookieManager的方法有没有用
    urlConn.setInstanceFollowRedirects(false);这种我不知道客户端拒绝redirect有没有用,也就是服务端的redirect消息意味着什么不清楚
      

  13.   

    后来不是又上空的了么,加了什么呢?
    如果仅仅通过setInstanceFollowRedirects(false)解决的,那估计屏蔽redirect就不会影响下载
    但是这个单纯的url怎么会redirect呢