Flask项目中JS表单上传PDF文件在iPhone/Windows设备上失败的问题求助
Flask项目中JS表单上传PDF文件在iPhone/Windows设备上失败的问题求助
我正在写一个小型Flask程序,功能是让用户通过前端的HTML/JS表单上传PDF文件,后端统一处理这些文件。我在Ubuntu和Android(Firefox浏览器)上测试完全没问题,但找了两个用户测试后发现上传失败——一个用的是iPhone,另一个是Windows设备。
前端代码片段
<form id="bundleForm" action="/create_bundle" method="POST" enctype="multipart/form-data"> <div class="card"> <div class="card-header"> <div class="card-icon"> <i class="mdi mdi-file-multiple"></i> </div> <h2 class="card-title">Add PDFs</h2> </div> <div id="dropZone" class="upload-zone"> <i class="mdi mdi-upload upload-icon" style="color: #d57782;"></i> <p><span style="color: #d57782; font-size: 1.2rem;"><b>Upload your PDFs here:</b> Click to select, or drag and drop</p></span> <input type="file" id="fileInput" name="files" multiple accept=".pdf" style="display: none;"> <div class="progress-container"> <div class="progress-bar"></div> </div> </div> </div>
后端上传处理代码片段
def save_uploaded_file(file, directory, filename=None): app.logger.debug(f"[{session_id}-{timestamp}-APP]-- save_uploaded_files activated for {file}") if file and file.filename: filename = filename or file.filename filename = secure_filename(filename) filepath = os.path.join(directory, filename) file.save(filepath) return filepath return None @app.route('/') def index(): return render_template('index.html') @app.route('/create', methods=['GET', 'POST']) def create(): if request.method == 'GET': return render_template('index.html') timestamp = datetime.now().strftime('%Y%m%d_%H%M%S') session_id = str(uuid.uuid4())[:8] try: # Create temporary working directory in ./tempfiles/{timestamp}: if not os.path.exists('tempfiles'): os.makedirs('tempfiles') temp_dir = os.path.join('tempfiles', session_id) os.makedirs(temp_dir) app.logger.debug(f"[{session_id}-{timestamp}-APP]-- Temporary directory created: {temp_dir}") # Save uploaded files app.logger.debug(f"[{session_id}-{timestamp}-APP]-- ******************Gathering uploads******************") files = secure_filename(request.files.getlist('files')) input_files = [] for file in files: if file.filename: filepath = save_uploaded_file(file, temp_dir) if filepath: input_files.append(filepath) app.logger.debug(f"[{session_id}-{timestamp}-APP]-- Number of input_files: {len(input_files)}") # ... 后续代码省略
服务部署及其他信息
这个应用用Waitress默认配置部署,测试环境没有设置任何文件大小限制,也没修改默认超时时间。
我觉得不是权限问题,因为成功和失败的测试都是在同一个实例上跑的;也不像是文件名的问题,因为已经做了文件名清洗。
我加了调试日志试图定位问题,但没找到原因。我自己在Android和Ubuntu上,不管是本地网络还是远程访问,换不同浏览器测试都能正常复现成功场景——日志里会显示正确的文件数量,比如Number of input_files: 3。但其他用户的测试日志里,这个值是Number of input_files: 0。
还有一个用户反馈,上传时似乎会忽略第一个文件,不过有时候剩下的文件能正常处理。
我查了Stack Overflow上的其他相关回答,试了一些调整但都没用,也没法解释为什么问题只出现在特定设备上。这是我第一次用JavaScript和Flask开发,完全不知道从哪里入手排查了。
备注:内容来源于stack exchange,提问作者Tris Sherliker
相关产品推荐
相关产品推荐

