Oracle APEX如何不转存上传文件至服务器,直接存储用户本地原文件路径
需求实现说明
首先明确核心限制:
- 你当前使用的是B/S架构的Oracle APEX应用,所有主流浏览器出于用户隐私安全限制,不会将客户端本地文件的完整原始路径传递给服务端,服务端仅能获取到上传文件的文件名和二进制内容,无法直接拿到
c:\users\mydocuments这类本地路径,因此纯Web端无法直接实现你的需求。
可行替代方案
如果你的使用场景是内网受控环境,可以选择以下两种方案实现:
方案1:新增本地路径输入项(最易实现)
在上传页面新增文本输入项:P48_LOCAL_FILE_PATH,由用户手动填写文件在本地的完整路径,修改原有逻辑如下:
- 直接删除
blob_to_file存储过程的调用逻辑,不需要再把文件写入服务器磁盘 - 修改插入语句,将用户填写的本地路径存入
ATTACHMENTS表
修改后的PL/SQL代码如下:
DECLARE l_blob BLOB; VID NUMBER; BEGIN select BLOB_CONTENT INTO l_blob FROM apex_application_temp_files where NAME= :P48_BLOB_CONTENT ; INSERT INTO ATTACHMENTS(ATTACHMENTS_ID, ATTACHMENT_NAME,CASE_ID,DATE_CREATED, MIME_TYPE,designation,file_content) VALUES("ATTACHMENTS_SEQ".nextval,:P48_ATTACHMENT_NAME,:P48_CASE_ID,SYSDATE,'application/pdf',:P48_LOCAL_FILE_PATH,l_blob); END;
注:如果不需要留存文件二进制内容,可以去掉
file_content字段的插入逻辑,减少数据库存储空间占用。
方案2:使用本地客户端采集路径
如果不希望用户手动输入,可以开发轻量本地桌面客户端(如Electron、C# WinForm程序),由客户端读取本地文件完整路径后,连同文件内容一起传递给APEX接口,后端直接存储客户端上传的路径即可。
注意事项
你存储的用户本地路径仅对上传用户本人的设备有效,其他用户访问系统时无法通过该路径打开对应文件,如果你需要实现多用户访问附件,依然需要将文件存储在公共可访问的服务端位置。
内容的提问来源于stack exchange,提问作者Rawle Musgrave
相关产品推荐
相关产品推荐

