You need to enable JavaScript to run this app. Laravel接收curl上传CSV文件时fopen提示文件名不能为空错误排查
优惠活动
大模型
产品
解决方案
定价
更多

Laravel接收curl上传CSV文件时fopen提示文件名不能为空错误排查

问题原因及解决方案

1. 核心错误:curl命令使用不符合文件上传要求

你当前使用的curl -d @data.csv myserver.com是将文件内容作为普通POST表单字符串提交,不属于标准文件上传请求,不会被PHP识别为$_FILES类型的上传资源,因此Laravel的$request->file()方法无法读取到对应文件,返回空值,最终触发fopen()参数为空的报错。

正确的文件上传curl命令需要使用-F参数指定multipart/form-data类型的文件字段,示例如下:

curl -F "data.csv=@/你本地的文件完整路径/data.csv" myserver.com

注意命令里的data.csv要和后端代码$request->file('data.csv')里的字段名保持完全一致。

2. 关于sys_temp_dir配置的疑问

你php.ini里的; sys_temp_dir = "/tmp"行开头的分号是PHP配置的注释标记,代表这条配置未被手动启用,会默认使用系统级临时目录,你已经通过代码验证sys_get_temp_dir()返回值为/tmp,且/tmp目录权限为drwxrwxrwt(带粘滞位的全局可写权限,是Linux临时目录的正常权限),这条配置完全不会导致你当前的问题。
另外你的上传目录配置upload_tmp_dir = /tmp已经显式开启无注释,符合上传要求。

3. Laravel代码优化建议

建议先判断文件上传状态再操作,避免异常报错:

public function endpoint(Request $request)
{
    // 先校验文件是否存在且上传合法
    if (!$request->hasFile('data.csv') || !$request->file('data.csv')->isValid()) {
        return response()->json(['error' => '文件未上传或上传失败'], 400);
    }
    $uploadedFile = $request->file('data.csv');
    // 取文件临时路径传入fopen
    $handle = fopen($uploadedFile->getPathname(), "r");
    // 后续业务逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 01:54:03