• FastDFS报错File name too long(fdfs报错File name too long)


    报错信息

    [Errno 36] File name too long: b'download/1667513450554-\\u435C\\u4E48\\u505C\\u5C44\\u4552\\u454D\\u7478\\u7551\\u7265\\u5C79\\u554F\\u5C54\\u4150\\u4449\\u445C\\u5441\\u4541\\u5458\\u4F5C\\u5357\\u4843\\u4445\\u4C4D\\u4A5F\\u4544\\u505F\\u4941\\u5F44\\u6F4D\\u746E\\u6C68\\u5F79\\u3638\\u3130\\u5F36\\u3032\\u3232\\u3131\\u3330\\u3831\\u3631\\u3735\\u595F\\u5943\\u3834\\u3437\\u7A2E\\u7069'

    现场环境

    fdfs下载文件时,出现此错误,原因就是文件名太长导致。

    解决方法

    第一步:修改源码

    这个模块源码路径可以在错误日志(/data/fastdfs-nginx-module/src/common.c)里面看到,找到错误对应代码位置(Line 614)

    向上找到uri的定义 

    其中256就是字符长度限制,修改成2560,扩大10倍限制 

    保存

    第二步:编译安装重启

    切换到fastdfs所使用的nginx源码目录,我这是docker安装,路径在/data/nginx(可以从报错日志的源码路径看出

    1. root@localhost:/etc/nginx/logs# cd /data/nginx
    2. root@localhost:/data/nginx# ll
    3. total 664
    4. drwxr-xr-x. 1 1001 1001 34 Mar 13 06:29 ./
    5. drwxr-xr-x. 1 root root 64 Jul 20 2016 ../
    6. -rw-r--r--. 1 1001 1001 258455 Feb 9 2016 CHANGES
    7. -rw-r--r--. 1 1001 1001 393734 Feb 9 2016 CHANGES.ru
    8. -rw-r--r--. 1 1001 1001 1397 Feb 9 2016 LICENSE
    9. -rw-r--r--. 1 root root 376 Mar 13 06:29 Makefile
    10. -rw-r--r--. 1 1001 1001 49 Feb 9 2016 README
    11. drwxr-xr-x. 6 1001 1001 4096 Jul 20 2016 auto/
    12. drwxr-xr-x. 2 1001 1001 168 Jul 20 2016 conf/
    13. -rwxr-xr-x. 1 1001 1001 2481 Feb 9 2016 configure*
    14. drwxr-xr-x. 4 1001 1001 72 Jul 20 2016 contrib/
    15. drwxr-xr-x. 2 1001 1001 40 Jul 20 2016 html/
    16. drwxr-xr-x. 2 1001 1001 21 Jul 20 2016 man/
    17. drwxr-xr-x. 4 root root 172 Mar 13 06:30 objs/
    18. drwxr-xr-x. 9 1001 1001 91 Jul 20 2016 src/

    清理=>设置编译参数(通过nginx -V可以查看之前的编译参数,复制过来)=>编译安装

    1. make clean
    2. ./configure --prefix=/etc/nginx --add-module=/data/fastdfs-nginx-module/src
    3. make
    4. make install

    然后重启nginx问题就解决了

    错误原因

    这代码的意思是判断请求路径长度,如果大于uri的长度就报错

    fastdfs-nginx-module的模块里面,限制了URI的长度为256字节,如果你的URI长度超过256字节,则会报错

    刚开是我还以为哪里可以配置这个长度,看了下源码,发现特么这个是写死的

    uri的定义为

    char uri[256]

    是一个长度为256字节的字符串,c语言源码中,把浏览器中的地址,复制到局部变量uri中,

    然后这个局部变量只能存256字节,为防止溢出,所以才有这个么校验。真特么短,改到2560字节妥妥的。

  • 相关阅读:
    gitlab安装在虚拟机下,使用gitlabrunner通过宿主机网络访问
    iTOP-RK3588开发板rknn_multiple_input_demo 体验
    npm install 报错问题解决合集
    工作流-流程实例【ProcessInstance】与执行实例【Execution】
    Redis网络模型-IO多路复用
    CVE-2021-22205 Github upload RCE漏洞复现
    神经网络(二)回归与线性模型
    DispatcherSynchronizationContext and Dispatcher
    Axure导入使用ElementUI组件库
    跨平台.NET应用UI组件DevExpress XAF v22.1 - 增强Web API Service
  • 原文地址:https://blog.csdn.net/u012206617/article/details/127689369