• 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字节妥妥的。

  • 相关阅读:
    一棵完全二叉树的第7层(根节点为第0层)有12个叶子节点,求整棵树最多有多少个节点和最少有多少个节点
    基于51单片机的简易交通灯仿真代码讲解
    一分钟理解:Blazor WebAssembly 和 Blazor Server 差异性
    用于包管理的基本命令APT-GET和APT-CACHE
    基于C# ASP.NET的人事管理系统的设计与实现
    Spring Cloud Hystrix 熔断参数配置
    C++ 栈和典型迷宫问题
    SpringBoot+Vue实现前后端分离旅游资源信息系统
    PyInstaller库简介和运用
    算法设计与分析 实验4 动态规划法求扔鸡蛋问题
  • 原文地址:https://blog.csdn.net/u012206617/article/details/127689369