{"record":{"id":"6dbd2317e11fb22e","repo":"Tencent/WeKnora","slug":"failed-to-download-file-from-url-w","errorCode":null,"errorMessage":"failed to download file from URL: %w","messagePattern":"failed to download file from URL: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/application/service/knowledge_process.go","lineNumber":3355,"sourceCode":"\t\t\tknowledge.ParseStatus = \"failed\"\n\t\t\tknowledge.ErrorMessage = \"File URL is not allowed for security reasons\"\n\t\t\tknowledge.UpdatedAt = time.Now()\n\t\t\ts.repo.UpdateKnowledge(ctx, knowledge)\n\t\t\treturn nil\n\t\t}\n\n\t\tresolvedFileName := payload.FileName\n\t\tresolvedFileType := payload.FileType\n\t\tcontentBytes, err := downloadFileFromURL(ctx, payload.FileURL, &resolvedFileName, &resolvedFileType)\n\t\tif err != nil {\n\t\t\tlogger.Errorf(ctx, \"Failed to download file from URL: %s, error: %v\", payload.FileURL, err)\n\t\t\tif isLastRetry {\n\t\t\t\tknowledge.ParseStatus = \"failed\"\n\t\t\t\tknowledge.ErrorMessage = err.Error()\n\t\t\t\tknowledge.UpdatedAt = time.Now()\n\t\t\t\ts.repo.UpdateKnowledge(ctx, knowledge)\n\t\t\t}\n\t\t\treturn fmt.Errorf(\"failed to download file from URL: %w\", err)\n\t\t}\n\n\t\tif resolvedFileType != \"\" && !isSupportedImportExtension(resolvedFileType) {\n\t\t\tlogger.Errorf(ctx, \"Unsupported file type resolved from file URL: %s\", resolvedFileType)\n\t\t\tknowledge.ParseStatus = \"failed\"\n\t\t\tknowledge.ErrorMessage = fmt.Sprintf(\"unsupported file type: %s\", resolvedFileType)\n\t\t\tknowledge.UpdatedAt = time.Now()\n\t\t\ts.repo.UpdateKnowledge(ctx, knowledge)\n\t\t\treturn nil\n\t\t}\n\n\t\tif resolvedFileName != \"\" && knowledge.FileName == \"\" {\n\t\t\tknowledge.FileName = resolvedFileName\n\t\t}\n\t\tif resolvedFileType != \"\" && knowledge.FileType == \"\" {\n\t\t\tknowledge.FileType = resolvedFileType\n\t\t\ts.repo.UpdateKnowledge(ctx, knowledge)\n\t\t}","sourceCodeStart":3337,"sourceCodeEnd":3373,"githubUrl":"https://github.com/Tencent/WeKnora/blob/988cbb03305e055d8ebb7d46d9ac6cc0803cd074/internal/application/service/knowledge_process.go#L3337-L3373","documentation":"Thrown in ProcessDocument when downloadFileFromURL fails to fetch the user-supplied FileURL (after the SSRF allowlist check passed). Fires on network errors, DNS failures, redirects, or the remote host returning a bad status; the document's ParseStatus is marked failed on the last retry.","triggerScenarios":"Thrown at internal/application/service/knowledge_process.go:3355 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the source URL is reachable and serves the file","Check egress network/DNS from workers to the external host","Retry the parse task; asynq re-attempts before terminal failure","Inspect knowledge.ErrorMessage for the wrapped HTTP/network cause"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"988cbb03305e055d8ebb7d46d9ac6cc0803cd074","analyzedAt":"2026-09-02T14:41:08.344Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}