java 实现 http 文件下载

本文介绍了一个Java实现的HTTP文件下载工具类,该工具能够从指定URL下载文件,并保存到本地指定路径,支持从文件名头部或URL中解析文件名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.easemob.server.example.httpclient.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;

public class HttpUtils {

    /**
     * LOCAL_PATH 文件存储的位置
     * fileUrl 待下载文件地址
     * type 文件类型  jpg,png,mp3...
     * @return
     */
     public static String FileDown(String LOCAL_PATH,String fileUrl,String type){

         InputStream in=null;
          OutputStream out=null;
          HttpURLConnection conn=null;
          String fileName=null;
          try {
           //初始化连接
           URL url=new URL(fileUrl);
           conn = (HttpURLConnection) url.openConnection();
           conn.setDoInput(true);
           conn.setDoOutput(true);

           //获取文件名
           String disposition=conn.getHeaderField("Content-Disposition");
           if(disposition!=null&&!"".equals(disposition)){
            //从头中获取文件名
            fileName=disposition.split(";")[1].split("=")[1].replaceAll("\"","");
           }else{
            //从地址中获取文件名
            fileName=fileUrl.substring(fileUrl.lastIndexOf("/")+1);
           }

           if(fileName!=null&&!"".equals(fileName)){
            //文件名解码
            fileName=URLDecoder.decode(fileName, "utf-8")+".jpg";
           }else{
            //如果无法获取文件名,则随机生成一个
            fileName="file_"+(int)(Math.random()*10)+type;
           }

           //读取数据
           if(conn.getResponseCode()==HttpURLConnection.HTTP_OK){
            byte[] buffer=new byte[2048];
            in = conn.getInputStream();
            out=new FileOutputStream(new File(LOCAL_PATH,fileName));
            int count=0;
            int finished=0;
            int size=conn.getContentLength();
            while((count=in.read(buffer))!=-1){
             if(count!=0){
              out.write(buffer,0,count);
              finished+=count;
             // System.out.printf("---->%1$.2f%%\n",(double)finished/size*100);
             }else{
              break;
             }
            }
           }
          } catch (MalformedURLException e) {
           e.printStackTrace();
          } catch (IOException e) {
           e.printStackTrace();
          }finally{
           try {
            out.close();
            in.close();
            conn.disconnect();
           } catch (IOException e) {
            e.printStackTrace();
           }
          }

         return fileName;
     }

     public static void main(String[] args) {
      //待下载文件地址
      String fileUrl="http://182.92.228.160:80/otrue-cn/healthmanager/chatfiles/22ecda70-ad43-11e5-9531-d7e3b2ec0d8e";
       String LOCAL_PATH="E:/ceshi/";
       String type="jpg";
       String filename=FileDown(LOCAL_PATH, fileUrl,type);
       System.out.println(filename);
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值