[Share Experiences] 不安装任何软件实现局域网快速共享文件
Tofloor
poster avatar
Maicss
deepin
2021-01-04 02:00
Author

不安装任何软件实现局域网快速共享文件

在大多数Linux发行版中,Python都会作为系统组件预装在内,deepin也不例外,Python有一个非常好用的简单服务器功能,只需要一条命令即可创建一个简易的单线程服务器。大多数情况下,通过这种方式在局域网内传输文件,让几乎任何设备都可以接受你传送的文件,只需要在浏览器中点击下载即可。

怎么实现?

建立这个服务器很简单,只需要下边这条命令:

python3 -m http.server

在你想要分享的目录打开终端,然后输入这条命令,即可以此目录为根目录创建HTTP服务器。

此时终端中应当显示下边类似的内容:

这里我们需要记住端口号。然后在同一局域网下的其他设备上,可以在浏览器访问“http://IP:端口号”来访问这个文件夹

例如:“http://192.168.1.3:8000”,访问后显示以下内容

此时就可以点击下载了。

一般来说这个端口号是不变的,大多数情况下局域网的IP也是固定的,如果在家里,可以在路由器页面中为电脑分配一个固定的IP,这样把地址加入收藏夹中,即可快速访问,无需重复输入地址。

此时,你就可以通过python在局域网下的任何设备传输文件,而且不需要接受端下载任何软件,你也不需要安装额外的任何软件。

奔着大道至简的原则,我们需要简化这个过程。

现在我们知道的具体的流程,所以,哪个步骤可以简化?

目前,我们必须右键打开终端,然后输入命令,之后回车,然后在接受端输入地址,然后才能访问传输。

如果大家不介意上边的操作,或者不觉得麻烦,可以忽略这个。(而且如果身旁有女同学还可以露露脸

如果大家奔着能少点一下就少点一下的原则,那就继续往下看。

我们的目标是,最好只需要点一下,然后就可以用其他设备访问。

这是最终简化结果,只需要右键,点击一下即可。至于为什么我这里有两个,请往下看。

步骤一:写个脚本,化简命令

#!/bin/bash
deepin-terminal -e "python3 -m http.server" -w $1

这个脚本假如命名为"share",我们编辑好这个脚本后,把他放在/usr/bin目录下,即可在任意位置输入“share 路径”来打开服务器。

那么,就可以实现输入"share ~/Desktop"后以桌面为根目录的分享。

相对于原有的命令,是不是简洁多了。

但是还不够,傲娇的我一个命令都不想有

假设你已经完成了,那么进行下一步

步骤二:誓死不用命令行

想实现上边我截图中的效果,把东西放在右键菜单中,需要写一个类似快捷方式的东西,然后放到指定目录下。

这里的目录是:系统盘->/usr/share/deepin/dde-file-manager/oem-menuextensions

我们需要在里边新建一个扩展名为desktop的文件,例如share.desktop

然后在其中输入以下内容

[Desktop Entry]
Exec=share %U
GenericName=share
GenericName[zh_CN]=分享到局域网
MimeType=inode/directory;
Name=share
Name[zh_CN]=分享到局域网
Type=Application
X-Deepin-Vendor=user-custom

Exec那一项表示要运行的命令 %U表示当前的目录,假如说你在桌面点击右键打开,然后这个%U就是~/Desktop

这时候注销后重新登录即可使用。

一些补充:

deepin-terminal -e "python3 -m http.server" -w $1

这句命令可能有小白不太理解,因为python3 -m http.server没有图形界面,所以我们需要一个载体来控制他,deepin-terminal是深度终端,-e后边是需要运行的命令,-w是设置当前路径。

输入deepin-terminal -h可以看到完整的介绍。

这样做的好处是当你想停止时只需要按Ctrl+C或者直接关掉终端窗口即可。

另一些补充:

我右键有两个分享是因为我在之前自己做了一个程序来简化和优化这个过程。

下边是程序地址

https://gitee.com/Maicss/SendByLAN

你也可以在星火商店找到他。

spk://store/tools/sendbylan

这是他的截图

右键点击后就会出现,如果接受端是手机,那么可以直接扫描二维码访问,电脑的话,可以输入上边显示的链接。

至此就完成了

相信有比我更“热爱极简”的某癌患者

我写了一个配置脚本,只需要用运行一下sudo ./install即可

下载脚本

大家有任何问题欢迎在下边讨论~

Reply Favorite View the author
Comments
poster avatar
ieayoio
2021-01-06 18:06
很好收藏了
All Replies
1 / 2
To page
Fredoong
deepin
2021-01-04 07:03
#1

感谢楼主分享

竟然还有誓死不用命令行的GNU/Linux用户啊

Reply View the author
fhy
deepin
2021-01-06 00:14
#2

我是用 Golang 实现的 几行代码

 

package main

import (
        "net/http"
        "log"
)

func main() {
        log.Println("静态服务已启动:9090")
        http.Handle("/", http.FileServer(http.Dir("./")))
        http.ListenAndServe(":9090", nil)
}
Reply View the author
相信
deepin
2021-01-06 01:59
#3

如何取消呢?

python3 -m http.server | 操作了这条命令后?

Reply View the author
Maicss
deepin
2021-01-06 02:13
#4
相信

如何取消呢?

python3 -m http.server | 操作了这条命令后?

关闭终端,或者Ctrl+C

Reply View the author
Hello
deepin
2021-01-06 20:40
#5

各位同志,我只能够本机访问是怎么回事,以前试过关闭所有防火墙成功了。。但现在又不知道咋做了

Reply View the author
绍贝格尔
deepin
2021-01-06 20:57
#6

nfs  也也不错

Reply View the author
panasony
deepin
2021-01-07 20:54
#7

mark了

Reply View the author
tang20201209
deepin
2021-01-08 23:31
#8

还可以进一步简化,让终端的输出日志后台运行,而不是一直等待

Reply View the author
yttoeq
deepin
2021-01-08 23:50
#9

Deepin文件管理器的地址栏没windows那么方便,如能如windows那样地址栏直接点击后显示当前路径就更便于输入或更改路径以访问windows共享目录,另外如能增加类似windows的“运行”栏就便利了

 

Reply View the author
Maicss
deepin
2021-01-09 02:21
#10
yttoeq

Deepin文件管理器的地址栏没windows那么方便,如能如windows那样地址栏直接点击后显示当前路径就更便于输入或更改路径以访问windows共享目录,另外如能增加类似windows的“运行”栏就便利了

 

确实,不过也仅仅需要右键点击编辑地址就可以。

Reply View the author
centimeter1983
deepin
2021-01-11 18:18
#11

同5楼,本机可正常打开,其他设备无法打开,是防火墙的问题?

Reply View the author
Maicss
deepin
2021-01-11 18:29
#12
centimeter1983

同5楼,本机可正常打开,其他设备无法打开,是防火墙的问题?

不太清楚,之前有动过防火墙吗,我没碰到过这个问题

Reply View the author
liwl
deepin
2021-01-12 21:36
#13

我都是直接sudo apt-get install apache2了

Reply View the author
lizhuojian
deepin
2021-01-12 22:18
#14

我用feem无服务器传输软件,虽然是要装一下,不过什么平台都可以有客户端,依赖服务器,真心方便啊

Reply View the author
wtz
deepin
2021-01-13 20:59
#15
Hello

各位同志,我只能够本机访问是怎么回事,以前试过关闭所有防火墙成功了。。但现在又不知道咋做了

装一个ufw看看

Reply View the author
不息
deepin
2021-01-15 21:24
#16
fhy

我是用 Golang 实现的 几行代码

 

package main

import (
        "net/http"
        "log"
)

func main() {
        log.Println("静态服务已启动:9090")
        http.Handle("/", http.FileServer(http.Dir("./")))
        http.ListenAndServe(":9090", nil)
}

php的话,直接执行命令
php -S 0.0.0.0:8888 -t 路径

即可,写啥代码

Reply View the author
Cris.Q
deepin
2021-01-17 19:00
#17
Fredoong

感谢楼主分享

竟然还有誓死不用命令行的GNU/Linux用户啊

比如我hhhh

Reply View the author
thepoy
deepin
2021-01-19 03:58
#18

这不只能下载deepin上的文件吗?向deepin上传是不是就不方便了

Reply View the author
lirx2014
deepin
2021-01-22 17:45
#19
liwl

我都是直接sudo apt-get install apache2了

编程广告。

Reply View the author
Hello
deepin
2021-01-27 20:28
#20

终于搞清楚了。我的服务是apache2,开端口之前没把端口打开

sudo ufw allow 8090

然后就能正常访问了

Reply View the author
1 / 2
To page