gpt4 book ai didi

java - 在 Java、Play Framework 2.2.1 中 Gzip 文件

转载 作者:行者123 更新时间:2023-11-30 08:00:14 26 4
gpt4 key购买 nike

我正在尝试使用 Java 对文件进行 Gzip 压缩,以便在 Play Framework 2.2.1 中输出。

这不是 Assets ,也不是静态文件。例如,可以是用户上传的用户头像。例如,PNG 图像。

我对此进行了搜索,只找到了如何对字符串进行 GZIP 压缩,并且 Play 框架对公共(public) Assets 进行自动 Gzip 压缩,但事实并非如此。

我尝试过的一些代码:

public static Result userAvatar(long userId) throws IOException {
UserAvatar avatar = UserAvatar.get(userId);

InputStream avatarStream;
Long version;

// Use the default avatar.
if (avatar == null) {
avatarStream = Play.current().resourceAsStream("public/images/noavatar.png").get();
version = 0L;
} else {
avatarStream = new ByteArrayInputStream(avatar.avatar);
version = avatar.version;
}

byte[] byteArray = IOUtils.toByteArray(avatarStream);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(byteArray.length);
OutputStream gzip = new GZIPOutputStream(outputStream);

int len;
while ((len = avatarStream.read(byteArray)) > 0) {
gzip.write(byteArray, 0, len);
}

avatarStream.close();
gzip.close();

// The client has the correct image cached if the ETag matches
String eTag = request().getHeader("If-None-Match");
if (eTag != null && eTag.equals(version.toString())) {
return status(NOT_MODIFIED, "Not modified");
}

response().setContentType("image/png");
response().setHeader(ETAG, version.toString());
return Results.ok(outputStream.toByteArray());
}

这不起作用,谷歌只返回 gzip 字符串的答案。有人可以帮忙吗?

编辑:在这种情况下不起作用意味着结果为 0 字节。

最佳答案

len 必然始终为 0

在这一行中:

byte[] byteArray = IOUtils.toByteArray(avatarStream);

您读取了所有 avatarStream - 它现在为空,还剩 0 字节。
在这一行中:

while ((len = avatarStream.read(byteArray)) > 0) {

检查您仍然可以读取多少内容 - 即 0 字节。

替换

int len;
while ((len = avatarStream.read(byteArray)) > 0) {
gzip.write(byteArray, 0, len);
}

仅仅

gzip.write(byteArray);

关于java - 在 Java、Play Framework 2.2.1 中 Gzip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32070163/

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