想求教个问题,关于 Java 通过 url 下载文件的问题

2019-05-18 17:46:46 +08:00
 RLinux

问题详情:就是我想下载附件并保存到本地。我在网页点击附件会直接弹出下载框问是否保存文件,我将弹出下载文件的 url,给获取下载,并通过以下方法去操作,文件可以保存,但已经损坏,文件大小都为 4kb,打不开,文件名我能正确获取

 //通过 url 下载资源到本地
    public static final Boolean downLoadSourceByUrl(String url, String fileName){
        HttpGet httpGet = null;
        String localFileName = null;
        String fileOriName = null;
        System.out.println("进入保存文件这");
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            // 这里我设置了超时时间的配置,也可以不设
            RequestConfig timeoutConfig = RequestConfig.custom()
                    .setConnectTimeout(5000).setConnectionRequestTimeout(1000)
                    .setSocketTimeout(5000).build();
            // 本例的文件下载接口是直接返回的文件流
            httpGet = new HttpGet(url);
            httpGet.setConfig(timeoutConfig);
            httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0"); // 设置请求头消息 User-Agent
            HttpResponse downLoadResponse = httpClient.execute( httpGet);
            StatusLine statusLine = downLoadResponse.getStatusLine();
            // 响应码
            int statusCode = statusLine.getStatusCode();
            // 请求成功
            if (statusCode == 200) {
                System.out.println("请求成功");
                // 获取接口返回的文件流
                HttpEntity entity = downLoadResponse.getEntity();
                InputStream input = entity.getContent();
                // 本例是储存到本地文件系统,fileRealName 为你想存的文件名称
                File dest = new File("d:/img/"+fileName);
                OutputStream output = new FileOutputStream(dest);
                int len = 0;
                byte[] ch = new byte[10240];
                while ((len = input.read(ch)) != -1) {
                    output.write(ch, 0, len);
                }
            }
        } catch (Exception e) {
            System.out.println(e+"在工具类这");
            return false;
        } finally {
            if ( httpGet != null) {
                httpGet.releaseConnection();
            }
        }
        return true;
    }
1401 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/565373

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX