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

如何在Python中获取表单文件选择框选中文件的绝对路径?

解决Flask中无法获取上传文件本地绝对路径的问题

首先得明确一个核心误解:浏览器在处理文件上传时,绝不会把用户本地文件的真实绝对路径发送给服务器。你拿到的document.filename只是用户本地的文件名(部分浏览器甚至会刻意隐藏真实路径,只返回纯文件名),所以用os.path.abspath(orig_filename)得到的自然是服务器当前工作目录拼接文件名的路径——这本来就不是用户本地的真实路径,而且从安全和隐私角度,服务器也不应该获取到用户本地的文件路径。

那正确的处理方式是什么?你需要先把上传的文件保存到服务器的指定目录,然后获取这个文件在服务器上的绝对路径。针对你的Python 2.7 + Flask 0.12环境,修改后的代码如下:

import os
from flask import Flask, request

app = Flask(__name__)
# 定义服务器上的文件保存目录,提前创建好并确保有读写权限
UPLOAD_FOLDER = '/opt/flask_uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

def get_hash_for_doc(file_path):
    # 你的哈希计算逻辑,这里接收服务器上的文件路径即可
    pass

@app.route('/upload', methods=['POST'])
def upload_file():
    for attr, document in request.files.iteritems():
        orig_filename = document.filename
        if not orig_filename:
            continue  # 跳过空文件
        
        # 拼接服务器端的完整保存路径
        server_file_path = os.path.join(app.config['UPLOAD_FOLDER'], orig_filename)
        # 将上传的文件保存到服务器
        document.save(server_file_path)
        
        # 获取该文件在服务器上的绝对路径
        absolute_path = os.path.abspath(server_file_path)
        print(absolute_path)
        
        # 传入服务器文件路径计算哈希
        mhash = get_hash_for_doc(absolute_path)
    return 'Upload processed successfully'

额外注意事项:

  • 确保UPLOAD_FOLDER目录在Linux系统中存在,并且运行Flask进程的用户拥有该目录的读写权限(可以用mkdir -p /opt/flask_uploads创建,chown www-data:www-data /opt/flask_uploads调整权限,具体用户根据你的部署环境调整)。
  • 如果担心文件名重复导致覆盖,可以给文件名添加唯一标识(比如时间戳、UUID),比如:orig_filename = f"{uuid.uuid4().hex}_{document.filename}"。
  • 如果你的哈希计算逻辑不需要完整文件路径,也可以直接读取文件内容进行计算,不用保存到磁盘,比如document.read()获取文件字节流后传入哈希函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:37:36