您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

upload_file.py 2.8KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from werkzeug.exceptions import NotFound
  2. from controllers.service_api import service_api_ns
  3. from controllers.service_api.wraps import (
  4. DatasetApiResource,
  5. )
  6. from core.file import helpers as file_helpers
  7. from extensions.ext_database import db
  8. from models.dataset import Dataset
  9. from models.model import UploadFile
  10. from services.dataset_service import DocumentService
  11. @service_api_ns.route("/datasets/<uuid:dataset_id>/documents/<uuid:document_id>/upload-file")
  12. class UploadFileApi(DatasetApiResource):
  13. @service_api_ns.doc("get_upload_file")
  14. @service_api_ns.doc(description="Get upload file information and download URL")
  15. @service_api_ns.doc(params={"dataset_id": "Dataset ID", "document_id": "Document ID"})
  16. @service_api_ns.doc(
  17. responses={
  18. 200: "Upload file information retrieved successfully",
  19. 401: "Unauthorized - invalid API token",
  20. 404: "Dataset, document, or upload file not found",
  21. }
  22. )
  23. def get(self, tenant_id, dataset_id, document_id):
  24. """Get upload file information and download URL.
  25. Returns information about an uploaded file including its download URL.
  26. """
  27. # check dataset
  28. dataset_id = str(dataset_id)
  29. tenant_id = str(tenant_id)
  30. dataset = db.session.query(Dataset).where(Dataset.tenant_id == tenant_id, Dataset.id == dataset_id).first()
  31. if not dataset:
  32. raise NotFound("Dataset not found.")
  33. # check document
  34. document_id = str(document_id)
  35. document = DocumentService.get_document(dataset.id, document_id)
  36. if not document:
  37. raise NotFound("Document not found.")
  38. # check upload file
  39. if document.data_source_type != "upload_file":
  40. raise ValueError(f"Document data source type ({document.data_source_type}) is not upload_file.")
  41. data_source_info = document.data_source_info_dict
  42. if data_source_info and "upload_file_id" in data_source_info:
  43. file_id = data_source_info["upload_file_id"]
  44. upload_file = db.session.query(UploadFile).where(UploadFile.id == file_id).first()
  45. if not upload_file:
  46. raise NotFound("UploadFile not found.")
  47. else:
  48. raise ValueError("Upload file id not found in document data source info.")
  49. url = file_helpers.get_signed_file_url(upload_file_id=upload_file.id)
  50. return {
  51. "id": upload_file.id,
  52. "name": upload_file.name,
  53. "size": upload_file.size,
  54. "extension": upload_file.extension,
  55. "url": url,
  56. "download_url": f"{url}&as_attachment=true",
  57. "mime_type": upload_file.mime_type,
  58. "created_by": upload_file.created_by,
  59. "created_at": upload_file.created_at.timestamp(),
  60. }, 200