From 5e9d411f1b96ad0147fffd812486fe3584eaa09d Mon Sep 17 00:00:00 2001 From: heavyrian2012 Date: Wed, 9 Apr 2025 16:40:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=85=E7=BD=AE=E5=AD=98=E5=82=A8=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=9C=A8=E7=BA=BF=E6=92=AD=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xiaoleilu/loServer/action/FileAction.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/broker/src/main/java/com/xiaoleilu/loServer/action/FileAction.java b/broker/src/main/java/com/xiaoleilu/loServer/action/FileAction.java index 650d7acf..c0f4fe9e 100755 --- a/broker/src/main/java/com/xiaoleilu/loServer/action/FileAction.java +++ b/broker/src/main/java/com/xiaoleilu/loServer/action/FileAction.java @@ -1,8 +1,11 @@ package com.xiaoleilu.loServer.action; import java.io.File; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; +import java.net.URLEncoder; +import java.nio.file.Files; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; @@ -13,6 +16,7 @@ import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; import com.hazelcast.core.HazelcastInstance; +import com.hazelcast.util.StringUtil; import com.xiaoleilu.loServer.ServerSetting; import com.xiaoleilu.loServer.handler.Request; import com.xiaoleilu.loServer.handler.Response; @@ -90,11 +94,26 @@ public class FileAction extends Action { } response.setContent(file); - response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\""); + if (isAudioOrVideoFile(file.getName())) { + response.setHeader("Accept-Ranges", "bytes"); + } else { + response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + "\""); + } return true; } + private static boolean isAudioOrVideoFile(String name) { + try { + if (StringUtil.isNullOrEmpty(name)) return false; + + String mimeType = Files.probeContentType(new File(name).toPath()); + return mimeType != null && (mimeType.startsWith("audio/") || mimeType.startsWith("video/")); + } catch (IOException e) { + return false; + } + } + private static final Pattern INSECURE_URI = Pattern.compile(".*[<>&\"].*"); private static final SimpleDateFormat HTTP_DATE_FORMATER = new SimpleDateFormat(HTTP_DATETIME_PATTERN, Locale.US);