Add file type icons, enhance bucket date format, fix metadata display bug

This commit is contained in:
2026-01-16 13:18:06 +08:00
parent f5d2e1c488
commit a3b9db544c
5 changed files with 75 additions and 8 deletions

View File

@@ -1366,7 +1366,7 @@ def _bucket_list_versions_handler(bucket_name: str) -> Response:
SubElement(ver_elem, "Key").text = obj.key
SubElement(ver_elem, "VersionId").text = v.get("version_id", "unknown")
SubElement(ver_elem, "IsLatest").text = "false"
SubElement(ver_elem, "LastModified").text = v.get("archived_at", "")
SubElement(ver_elem, "LastModified").text = v.get("archived_at") or "1970-01-01T00:00:00Z"
SubElement(ver_elem, "ETag").text = f'"{v.get("etag", "")}"'
SubElement(ver_elem, "Size").text = str(v.get("size", 0))
SubElement(ver_elem, "StorageClass").text = "STANDARD"

View File

@@ -774,7 +774,7 @@ class ObjectStorage:
continue
payload.setdefault("version_id", meta_file.stem)
versions.append(payload)
versions.sort(key=lambda item: item.get("archived_at", ""), reverse=True)
versions.sort(key=lambda item: item.get("archived_at") or "1970-01-01T00:00:00Z", reverse=True)
return versions
def restore_object_version(self, bucket_name: str, object_key: str, version_id: str) -> ObjectMeta:
@@ -866,7 +866,7 @@ class ObjectStorage:
except (OSError, json.JSONDecodeError):
payload = {}
version_id = payload.get("version_id") or meta_file.stem
archived_at = payload.get("archived_at") or ""
archived_at = payload.get("archived_at") or "1970-01-01T00:00:00Z"
size = int(payload.get("size") or 0)
reason = payload.get("reason") or "update"
record = aggregated.setdefault(

View File

@@ -63,13 +63,14 @@ def _convert_to_display_tz(dt: datetime, display_tz: str | None = None) -> datet
def _format_datetime_display(dt: datetime, display_tz: str | None = None) -> str:
"""Format a datetime for display using the configured timezone.
Args:
dt: The datetime to format
display_tz: Optional timezone string. If not provided, reads from current_app.config.
"""
dt = _convert_to_display_tz(dt, display_tz)
return dt.strftime("%b %d, %Y %H:%M")
tz_abbr = dt.strftime("%Z") or "UTC"
return f"{dt.strftime('%b %d, %Y %H:%M')} ({tz_abbr})"
def _format_datetime_iso(dt: datetime, display_tz: str | None = None) -> str:
@@ -558,6 +559,11 @@ def list_bucket_objects(bucket_name: str):
objects_data = []
for obj in result.objects:
metadata = {}
try:
metadata = storage.get_object_metadata(bucket_name, obj.key)
except Exception:
pass
objects_data.append({
"key": obj.key,
"size": obj.size,
@@ -565,6 +571,7 @@ def list_bucket_objects(bucket_name: str):
"last_modified_display": _format_datetime_display(obj.last_modified),
"last_modified_iso": _format_datetime_iso(obj.last_modified),
"etag": obj.etag,
"metadata": metadata,
})
return jsonify({
@@ -657,6 +664,11 @@ def stream_bucket_objects(bucket_name: str):
yield json.dumps({"type": "count", "total_count": total_count}) + "\n"
for obj in result.objects:
metadata = {}
try:
metadata = storage.get_object_metadata(bucket_name, obj.key)
except Exception:
pass
yield json.dumps({
"type": "object",
"key": obj.key,
@@ -665,6 +677,7 @@ def stream_bucket_objects(bucket_name: str):
"last_modified_display": _format_datetime_display(obj.last_modified, display_tz),
"last_modified_iso": _format_datetime_iso(obj.last_modified, display_tz),
"etag": obj.etag,
"metadata": metadata,
}) + "\n"
if not result.is_truncated: