fix: OnlyOffice/Preview zeigt immer aktuelle Version (kein Cache)
Drei Cache-Ebenen gefixt: - Vue Router: :key=fullPath erzwingt Komponenten-Neuaufbau bei jeder Navigation (kein Wiederverwenden alter Instanzen) - Frontend: Cache-Bust Parameter an Preview + OnlyOffice API-Calls - Backend: No-Cache Headers (Cache-Control, Pragma) auf Preview-Endpunkt Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
916971fc1b
commit
5f79ebe9b0
|
|
@ -16,6 +16,13 @@ from app.models.settings import AppSettings
|
|||
@api_bp.route('/files/<int:file_id>/preview', methods=['GET'])
|
||||
@token_required
|
||||
def preview_file(file_id):
|
||||
from flask import after_this_request
|
||||
@after_this_request
|
||||
def add_no_cache(response):
|
||||
response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate'
|
||||
response.headers['Pragma'] = 'no-cache'
|
||||
return response
|
||||
|
||||
user = request.current_user
|
||||
f, err = _get_file_or_403(file_id, user, 'read')
|
||||
if err:
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@
|
|||
</aside>
|
||||
|
||||
<main class="main-content">
|
||||
<router-view />
|
||||
<router-view :key="$route.fullPath" />
|
||||
</main>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -104,6 +104,7 @@ const auth = useAuthStore()
|
|||
const toast = useToast()
|
||||
|
||||
const fileId = route.params.fileId
|
||||
const cacheBust = Date.now()
|
||||
const fileName = ref('')
|
||||
const previewType = ref('')
|
||||
const previewUrl = ref('')
|
||||
|
|
@ -135,12 +136,12 @@ async function loadPreview() {
|
|||
loading.value = true
|
||||
try {
|
||||
// For Office files, try OnlyOffice first
|
||||
const previewRes = await apiClient.get(`/files/${fileId}/preview`)
|
||||
const previewRes = await apiClient.get(`/files/${fileId}/preview?_=${cacheBust}`)
|
||||
fileName.value = previewRes.data.name || ''
|
||||
|
||||
if (isOfficeFile(fileName.value)) {
|
||||
try {
|
||||
const ooRes = await apiClient.get(`/files/${fileId}/onlyoffice-config`)
|
||||
const ooRes = await apiClient.get(`/files/${fileId}/onlyoffice-config?_=${cacheBust}`)
|
||||
if (ooRes.data.available) {
|
||||
onlyOfficeMode.value = true
|
||||
loading.value = false
|
||||
|
|
|
|||
Loading…
Reference in New Issue