gpt4 book ai didi

java - 使用 HTTP 读取文件的第一部分

转载 作者:搜寻专家 更新时间:2023-11-01 01:57:53 25 4
gpt4 key购买 nike

我想通过读取文件的第一部分并分析内容来确定文件的类型(通常是 UTF-8)。 (该类型特定于我的社区,但不在我的控制之下,也不在通常为 TEXT_PLAIN 的 MIME/MediaType 范围内)。我在客户端上使用“org.reSTLet”库来分析带有

的 header
Request request = new Request(Method.HEAD, url);

所以我知道内容长度并且可以(如果必要和可能)估计我应该下载多少字节进行分析

澄清:我不能使用 MediaType。从答案 1 看来我必须获取内容。因此,修改后的问题是:

“我可以使用 ReSTLet 获取文件的部分吗?”

回答:下面的代码做我想要的。我感谢@BalusC 指明了道路。如果我遗漏了什么,请评论:

public String readFirstChunk(String urlString, int byteCount) {
String text = null;
if (urlString != null) {
org.restlet.Client restletClient = new org.restlet.Client(Protocol.HTTP);
Request request = new Request(Method.GET, urlString);
List<Range> ranges = Collections.singletonList(new Range(0, byteCount));
request.setRanges(ranges);
Response response = restletClient.handle(request);
if (Status.SUCCESS_OK.equals(response.getStatus())) {
text = processSuccessfulChunkRequest(response);
} else if (Status.SUCCESS_PARTIAL_CONTENT .equals(response.getStatus())) {
text = processSuccessfulChunkRequest(response);
} else {
System.err.println("FAILED "+response.getStatus());
}
}
return text;
}

private String processSuccessfulChunkRequest(Response response) {
String text = null;
try {
text = response.getEntity().getText();
} catch (IOException e) {
throw new RuntimeException("Cannot download chunk", e);
}
return text;
}

最佳答案

只有在服务器发送 Accept-RangesContent-Range header 以及 ETagLast-Modified 时才有可能。例如

Accept-Ranges: bytes
Content-Range: bytes 0-1233/1234
ETag: file.ext_1234_1234567890

Accept-Ranges: bytes表示服务器支持请求返回指定字节范围内的部分内容。 Content-Range header 告知长度。 ETagLast-Modified 表示请求 URI 后面资源的唯一文件标识符或最后修改时间戳。

如果这些 header 出现在响应中,那么您可以使用 If-RangeRange 请求 header 请求部分资源,其中分别包含唯一文件标识符或最后修改的时间戳和所需的字节范围。

If-Range: file.ext_1234_1234567890
Range: bytes=0-99

上面的例子返回文件的前 100 个字节。

关于java - 使用 HTTP 读取文件的第一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4004675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com