java根据url获取文件的类型

前言

今天前端突然过来要我出个接口,想要知道图片url的类型,他需要生成图片指定后缀,由于我们的图片是存储在阿里云的oss上,文件url都是类似这种:https://imgistory.xxx.com/cs/f52361f41b55bc780162e32ef128ba2a,个人感觉还是挺有趣的,然后记一下。

介绍

在java的java.net包下有个HttpURLConnection类,大家应该不陌生,用来访问http协议,以下是对这个类的介绍

 

 查看数据结构发现只提供了一个有参构造,需要一个url地址

 在这个类中有两个方法可以查询到文件类型

1、根据文件名,这种方法不适用我们的url,而且不是很准确

2、根据url的字节流查询开头字符,这中直接针对于文件,几乎准确率达到百分百

 所以我们选择第二种方式获取,这个方法需要一个input输入流,所以我们需要将URL转为io流,代码如下:

package net.novelcomic.server.console.action.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import net.novelcomic.server.console.model.vo.bookchapter.Inputs;
import net.novelcomic.server.console.service.common.CommonService;
import net.pailing.kandian.framework.core.vo.BaseRsp;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author cai
 * @className CommonController
 * @description 通用
 * @dateTime 2023/2/22 10:22
 */
@Api(tags = {"通用"})
@RestController
@RequestMapping("/common")
@RequiredArgsConstructor
public class CommonController {

    private final CommonService commonService;

    @ApiOperation("获取文件类型")
    @RequestMapping("/fileType")
    public BaseRsp<String> getFileType(@RequestBody Inputs ro) {
        return new BaseRsp<>(commonService.getFileType(ro.getText()));
    }
}
package net.novelcomic.server.console.service.common;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;

@Service
@Slf4j
public class CommonService {
    /**
     * 获取url文件类型
     *
     * @param file
     * @return
     */
    public String getFileType(String file) {
        BufferedInputStream bis = null;
        HttpURLConnection urlconnection = null;
        URL url = null;
        try {
            url = new URL(file);
            urlconnection = (HttpURLConnection) url.openConnection();
            urlconnection.connect();
            bis = new BufferedInputStream(urlconnection.getInputStream());
            return HttpURLConnection.guessContentTypeFromStream(bis);
        } catch (IOException e) {
            log.error("获取url文件类型异常,file:{},excption:{}", file, e.getMessage());
        }
        return null;
    }
}

<think>好的,用户想了解如何使用YOLOv11进行数据集训练与推理,并获取其网络结构图。首先,我需要确认YOLOv11是否存在,因为目前主流的版本是YOLOv5、v8和v9。可能用户有笔误,或者YOLOv11是某个社区变体。不过根据提供的引用内容,用户提到了YOLOv9的PGI和GELAN技术,所以可能用户对版本号有混淆。需要先澄清这一点。 接下来,假设YOLOv11确实存在,或者用户指的是YOLO的最新版本,我需要根据现有YOLO系列的通用步骤来回答。首先,数据集的准备是关键,用户之前可能看过关于YOLOv8的博客,所以可以引用参考中的Roboflow获取数据集的方法[^1]。需要提醒用户数据集格式应与YOLOv5相同,如引用[3]提到的[^3]。 然后是训练部分,YOLO的训练通常涉及修改配置文件,指定数据集路径等。例如在YOLOv8中,用户需要找到train.py的位置,这可能与v5不同,如引用[3]提到的路径问题。对于v11,可能需要类似的操作,或者查看官方文档是否有更新。 关于网络结构图,通常YOLO的官方仓库会提供结构图,或者使用模型导出工具如Netron来可视化.pt或.onnx文件。需要指导用户如何导出模型并使用这些工具。 推理部分,YOLO通常使用detect.py脚本,用户需要指定训练好的权重和输入数据。需要提醒用户注意路径和参数设置。 可能用户提到的YOLOv11在优快云上有相关博客,但应建议用户优先查阅官方文档或GitHub仓库以确保准确性,因为社区版本可能各有差异。此外,用户可能在搜索时混淆了版本号,需要确认是否存在v11,或者是否可能是指v9或其他版本,并适当建议检查版本信息。 最后,生成相关问题时要覆盖数据集准备、训练步骤、结构图获取以及与其他版本的比较,帮助用户深入理解。</think>### 如何使用YOLOv11进行数据集训练与推理,并获取网络结构图? #### 1. **数据集准备与格式要求** YOLOv11延续了YOLO系列对数据集格式的要求,需遵循与YOLOv5相同的格式。数据集应包含以下内容: - `images`文件夹:存放训练/验证/测试的图片 - `labels`文件夹:对应图片的标注文件(.txt格式) - `data.yaml`配置文件:定义类别名称、数据集路径等信息 示例`data.yaml`配置: ```yaml train: ../train/images val: ../val/images names: 0: cat 1: dog ``` 建议使用Roboflow等工具进行数据格式转换与增强[^1]。 --- #### 2. **训练流程详解** 假设YOLOv11沿用了类似v8的代码结构,训练步骤如下: 1. 克隆官方仓库: ```bash git clone https://github.com/ultralytics/ultralytics ``` 2. 定位训练脚本:根据YOLOv8的经验,训练入口可能位于`ultralytics/models/yolo/v11/detect/train.py`[^3] 3. 启动训练命令: ```bash python train.py --data data.yaml --cfg yolov11s.yaml --weights '' --batch 16 --epochs 100 ``` 关键参数说明: - `--img-size`: 输入图像尺寸 - `--batch`: 批次大小 - `--device`: 指定GPU(如`0`或`0,1`) --- #### 3. **网络结构图获取方法** 建议通过以下方式获取结构图: 1. **官方文档**:查看GitHub仓库的`models`目录下的结构描述文件 2. **Netron可视化**: - 导出模型为ONNX格式: ```python from ultralytics import YOLO model = YOLO("yolov11.pt") model.export(format="onnx") ``` - 使用Netron工具打开`.onnx`文件 3. **代码生成**:通过`torchsummary`库输出结构摘要: ```python from torchsummary import summary summary(model, (3, 640, 640)) ``` --- #### 4. **推理部署实践** 训练完成后进行推理: ```python from ultralytics import YOLO # 加载自定义模型 model = YOLO("runs/train/weights/best.pt") # 单张图片推理 results = model.predict("test.jpg", save=True) # 视频流推理 results = model.predict("input.mp4", stream=True) ``` 支持多种输出格式: - `--save-txt`:保存检测结果到文本文件 - `--save-conf`:保留置信度分数 - `--hide-labels`:隐藏标签显示 --- #### 5. **技术特性解析** 若YOLOv11延续了YOLOv9的改进(参考PGI和GELAN[^2]),可能包含: - **动态标签分配策略**:提升小目标检测能力 - **混合精度训练**:减少显存占用 - **跨阶段特征融合**:增强多尺度检测 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值