You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java API文件上传下载时URI构造错误引发FileNotFoundException排查

问题原因分析

1. file URI 格式不符合规范

你当前传递的FILE_LOCATION值file:/192.168.0.3/c:/testDocs/testFile.docx存在两处格式错误:

  • 远程文件的file URI协议前缀格式错误:按照RFC 8089标准,访问远程主机的文件URI格式应为file://<主机地址>/<共享名>/<文件路径>,你只写了单斜杠file:/,会被Java解析为本地路径,所以会把192.168.0.3当成本地目录的第一层,自然找不到文件。
  • 路径中直接使用了远程机器的本地盘符:你不能直接在URI里写远程机器的c:/,必须先把远程机器的c:\testDocs文件夹设置为SMB共享,拿到共享名后用共享名替代盘符部分。比如你把该文件夹共享名设为testDocs,对应URI里的路径部分就是/testDocs/testFile.docx。

2. 原生URLConnection对远程SMB共享的兼容性差

就算你修正了URI格式,如果你的API部署在Linux服务器上,系统本身不支持直接通过file协议访问Windows SMB共享,依旧会抛出文件不存在的错误。

解决方案
  • 第一步:先配置远程机器(192.168.0.3)的共享设置,将c:\testDocs设为共享文件夹,记录共享名,同时确保API所在服务器有权限访问该共享。
  • 第二步:修正FILE_LOCATION的取值,示例(假设共享名为testDocs):
    { "FILE_LOCATION":"file://192.168.0.3/testDocs/testFile.docx" }
    
    如果你要用Windows默认的管理员共享C$,则取值为:
    { "FILE_LOCATION":"file://192.168.0.3/C$/testDocs/testFile.docx" }
    
  • 第三步:如果API部署在非Windows系统上,不要用原生URLConnection读取远程共享,改用JCIFS、SMBJ等专门的SMB客户端库实现文件读取。

额外提示:你当前的逻辑是API主动拉取客户端指定路径的文件,存在SSRF和本地文件读取的安全风险,上线前必须做好地址白名单校验,禁止访问内网敏感地址和服务器本地路径。

内容的提问来源于stack exchange,提问作者HLGallon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:36:05