mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-08-14 20:54:30 +08:00
Return 4xx when file download storage blob is missing (#15371)
## Summary Fixes [#15369](https://github.com/infiniflow/ragflow/issues/15369) — `GET /api/v1/files/<file_id>` calls `make_response(None)` when both primary and fallback storage lookups return empty, causing HTTP 500. ## Related Issue Fixes #15369 ## Change Type - [x] Bug fix - [x] Regression tests ## What Changed - **`file_api.download()`** — after fallback `STORAGE_IMPL.get`, return `get_error_data_result(message="This file is empty.")` when `not blob`, matching document REST download semantics. ## Files Changed | File | Change | |------|--------| | `api/apps/restful_apis/file_api.py` | Empty-blob guard before `make_response()` | | `test/testcases/test_web_api/test_file_app/test_file_routes_unit.py` | Regression test | ## Validation ```bash cd /root/gittensor/ragflow pytest test/testcases/test_web_api/test_file_app/test_file_routes_unit.py::test_download_missing_blob_returns_error -v pytest test/testcases/test_web_api/test_file_app/test_file_routes_unit.py::test_download_falls_back_to_document_storage -v ``` ## Test Plan - [x] Both storage paths empty → `"This file is empty."` (no `make_response(None)`) - [x] Existing fallback success test still passes - [ ] CI green
This commit is contained in:
@@ -327,6 +327,22 @@ def test_download_falls_back_to_document_storage(monkeypatch):
|
||||
assert res.headers["ext"] == "txt"
|
||||
|
||||
|
||||
@pytest.mark.p2
|
||||
def test_download_missing_blob_returns_error(monkeypatch):
|
||||
module = _load_file_api_module(monkeypatch)
|
||||
storage_calls = []
|
||||
|
||||
def _get(bucket, location):
|
||||
storage_calls.append((bucket, location))
|
||||
return None
|
||||
|
||||
monkeypatch.setattr(module.settings, "STORAGE_IMPL", SimpleNamespace(get=_get))
|
||||
res = _run(module.download("tenant1", "file1"))
|
||||
|
||||
assert storage_calls == [("bucket1", "path1"), ("bucket2", "path2")]
|
||||
assert res["message"] == "This file is empty."
|
||||
|
||||
|
||||
@pytest.mark.p2
|
||||
def test_parent_and_ancestors_use_new_routes(monkeypatch):
|
||||
module = _load_file_api_module(monkeypatch)
|
||||
|
||||
Reference in New Issue
Block a user