From 0ba1b63c9dc4eac8cb0ce01c277c5b6a76f2ad81 Mon Sep 17 00:00:00 2001
From: MarSeventh <1193267292@qq.com>
Date: Fri, 1 May 2026 20:53:21 +0800
Subject: [PATCH] fix: PROPFIND file size fallback for old files and use real
upload timestamp
- File size: prefer FileSizeBytes, fall back to FileSize (MB) * 1024^2
for files uploaded before FileSizeBytes was added
- Timestamps: use TimeStamp from metadata instead of current time,
so clients show the actual upload date, not the PROPFIND request time
---
functions/dav/[[path]].js | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/functions/dav/[[path]].js b/functions/dav/[[path]].js
index de4658df..156df2c7 100644
--- a/functions/dav/[[path]].js
+++ b/functions/dav/[[path]].js
@@ -323,8 +323,19 @@ function createCollectionXml(path) {
}
function createFileXml(file) {
- const now = new Date().toUTCString();
- const fileSize = file.metadata && file.metadata['FileSizeBytes'] ? file.metadata['FileSizeBytes'] : "0";
+ // 文件大小:优先 FileSizeBytes(字节),回退到 FileSize(MB)转字节
+ let fileSize = "0";
+ if (file.metadata) {
+ if (file.metadata['FileSizeBytes']) {
+ fileSize = String(file.metadata['FileSizeBytes']);
+ } else if (file.metadata['FileSize']) {
+ fileSize = String(Math.round(parseFloat(file.metadata['FileSize']) * 1024 * 1024));
+ }
+ }
+ // 修改时间:使用上传时间戳,回退到当前时间
+ const timestamp = file.metadata && file.metadata['TimeStamp']
+ ? new Date(Number(file.metadata['TimeStamp'])).toUTCString()
+ : new Date().toUTCString();
const contentType = file.metadata && file.metadata['FileType'] ? file.metadata['FileType'] : "application/octet-stream";
- return `${encodeURI(`/dav/${file.name}`)}${file.name.split('/').pop()}${now}${now}${fileSize}${contentType}HTTP/1.1 200 OK`;
+ return `${encodeURI(`/dav/${file.name}`)}${file.name.split('/').pop()}${timestamp}${timestamp}${fileSize}${contentType}HTTP/1.1 200 OK`;
}