ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

解决File Browser运行时因锁定数据库而无法插入用户的问题

2022-05-20 10:02:20  阅读:148  来源: 互联网

标签:时因 false filebrowser 用户 user File array true Browser


File Browser(文件浏览器)是一种基于GO语言开发的开源轻量级文件管理系统,它能够在浏览器上管理你的文件,让您可以在浏览器上使用查看、下载、修改等各种功能。 你可以把它当作私有云盘来使用。

File Browser最吸引我的地方就是可以通过shell命令进行管理,通过 filebrowser config 等等命令进行配置,参考 Command Line Interface 文档。例如想插入用户信息,则可以执行:

filebrowser users add root password --perm.admin

但File Browser运行过程中由于事务原因将数据库锁定了,执行命令提示timeout。

Activating privacy features... done.
2022/05/13 10:36:24 timeout

github翻找了一遍,发现很多人在问这个问题:

https://github.com/filebrowser/filebrowser/issues/210

https://github.com/filebrowser/filebrowser/issues/627

大家提供2种思路:

1、使用pm2关闭服务,插入用户信息再启动服务

2、将数据库复制一份,将用户信息写入未锁定的数据库,然后关闭服务后替换数据库文件。

思路虽好,但不满足我的需求,最后使出php+curl大法,模拟管理员登陆,模拟管理员新增用户,直接上代码:

<?php
header('Content-Type:application/json; charset=utf-8'); 
function doCurlPostRequest($url = '',Array $data = array(),$auth)
{
    $data_string = json_encode($data,JSON_UNESCAPED_UNICODE);
    $curl_con = curl_init();
    curl_setopt($curl_con, CURLOPT_URL,$url);
    curl_setopt($curl_con, CURLOPT_HEADER, false);
    curl_setopt($curl_con, CURLOPT_POST, true);
    curl_setopt($curl_con, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl_con, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($curl_con, CURLOPT_HTTPHEADER,array(
            "Content-Type: application/json",
            "Content-Length: " . strlen($data_string) . "",
            "X-Auth: ".$auth)
    );
    curl_setopt($curl_con, CURLOPT_POSTFIELDS, $data_string);
    $res = curl_exec($curl_con);
    $status = curl_getinfo($curl_con);
    curl_close($curl_con);
    return $res;
}
//filebrowser服务地址
$weburl = 'http://192.168.2.100:3331';
//管理员账号
$admin_username = "admin";
$admin_userpass = "admin";
//新增用户信息
$newuser_username = "zhangsan";
$newuser_userpass = "123457";
$param = array(
    "username"=>$admin_username,
    "password"=>$admin_userpass,
    "recaptcha"=>"",
);
//模拟登录,此处url改为filebrowser服务地址
$auth = doCurlPostRequest($weburl.'/api/login',$param,'');
if(trim($auth)=="403 Forbidden"){
    echo json_encode(array("code" => 0,"data" => '新增用户失败,校验未通过'));
    exit;
}
//添加用户,参数含义,可自己使用filebrowser新增一个用户看参数
$addUser = array(
  "what"=>"user",
  "which"=>[],
  "data"=>array(
        "scope"=>".",
        "locale"=>"zh-cn",
        "viewMode"=>"mosaic",
        "singleClick"=>false,
        "sorting"=>array("by"=>"","asc"=>false),
        "perm"=>array("admin"=>false,"execute"=>false,"create"=>true,"rename"=>true,"modify"=>true,"delete"=>true,"share"=>true,"download"=>true),
        "commands"=>[],
        "hideDotfiles"=>false,
        "dateFormat"=>false,
        "username"=>$newuser_username,
        "passsword"=>"",
        "rules"=>[],
        "lockPassword"=>false,
        "id"=>0,
        "password"=>$newuser_userpass
  ),
);

$user = doCurlPostRequest($weburl.'/api/users',$addUser,$auth);
if(trim($user)=="403 Forbidden"){
    echo json_encode(array("code" => 0,"data" => '新增用户失败,cookie校验未通过'));
    exit;
}else if(trim($user)=="500 Internal Server Error"){
    echo json_encode(array("code" => 0,"data" => '新增用户失败,可能用户已存在'));
    exit;
}else if(trim($user)=="201 Created"){
    echo json_encode(array("code" => 1,"data" => '新增用户成功'));
    exit;
}

其它系统想同步新增网盘用户时,直接调php接口即可。

标签:时因,false,filebrowser,用户,user,File,array,true,Browser
来源: https://www.cnblogs.com/codeit/p/16291258.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有