From 3178221c445e0d988f99ed26de297d49fa286ab1 Mon Sep 17 00:00:00 2001 From: redkale Date: Sun, 9 Apr 2023 21:28:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96ByteArray?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/redkale/net/http/HttpResponse.java | 4 ++- src/main/java/org/redkale/util/ByteArray.java | 29 +++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/redkale/net/http/HttpResponse.java b/src/main/java/org/redkale/net/http/HttpResponse.java index 413e83256..1ecd5ceb4 100644 --- a/src/main/java/org/redkale/net/http/HttpResponse.java +++ b/src/main/java/org/redkale/net/http/HttpResponse.java @@ -1300,7 +1300,9 @@ public class HttpResponse extends Response { addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8")); } } - this.contentType = MimeType.getByFilename(filename == null || filename.isEmpty() ? file.getName() : filename); + if (this.contentType == null) { + this.contentType = MimeType.getByFilename(filename == null || filename.isEmpty() ? file.getName() : filename); + } if (this.contentType == null) { this.contentType = "application/octet-stream"; } diff --git a/src/main/java/org/redkale/util/ByteArray.java b/src/main/java/org/redkale/util/ByteArray.java index 48ca9b483..8c12425b2 100644 --- a/src/main/java/org/redkale/util/ByteArray.java +++ b/src/main/java/org/redkale/util/ByteArray.java @@ -7,8 +7,10 @@ package org.redkale.util; import java.io.*; import java.nio.ByteBuffer; +import java.nio.channels.ReadableByteChannel; import java.nio.charset.*; import java.util.Arrays; +import java.util.concurrent.atomic.AtomicInteger; /** * 简单的byte[]操作类。 @@ -60,6 +62,33 @@ public final class ByteArray implements ByteTuple { return true; } + public ReadableByteChannel toChannel() { + final byte[] bytes = getBytes(); + final AtomicInteger offset = new AtomicInteger(); + + return new ReadableByteChannel() { + @Override + public int read(ByteBuffer dst) throws IOException { + if (offset.get() >= bytes.length) { + return -1; + } + int len = Math.min(bytes.length - offset.get(), dst.remaining()); + dst.put(bytes, offset.get(), len); + offset.addAndGet(len); + return len; + } + + @Override + public boolean isOpen() { + return true; + } + + @Override + public void close() throws IOException { + } + }; + } + /** * 设置count的新位置 *