首页
技术笔记
网址导航
Json在线解析
二维码
Ip地址查询
在线流程图
新用户注册
|
会员登录
在线工具
开发笔记
毒鸡汤
网址导航
免费在线流程图
18赞
913
当前位置:
开发笔记
>
编程语言
> 正文
静态文件服务器A和web应用服务器B分开,怎么样在B服务器上传的图片,上传到静态文件服务器应用是PHP写的?
作者:N个小灰流_701 | 2021-09-01 19:06
用户上传图片到B服务器,B服务器PHP收到之后,怎样复制到A服务器,大网站是怎么做的,用ftp?
用户上传图片到B服务器,B服务器PHP收到之后,怎样复制到A服务器,大网站是怎么做的,用ftp?
回复内容:
FTP这种太落后了,不要用。文件传输的开源程序很多,可以去找找,rsync也可以。
如果是我的话,我随手就写了一个upload_server和upload_client,基于swoole扩展。
https://
github.com/swoole/uploa
d-server
有以下种方式。
1. 如果A和B都为同一个局域网内的服务器,可以使用局域网网络磁盘映射,将A的某个磁盘目录映射到B的某个文件夹,那么,在B上传文件时,只需要复制一份到这个映射目录就可以了,系统会直接传送的A服务器的目录里,这个速度因为是局域网内所以是可以忽略速度影响的。
2.利用服务器rsync的同步工具。在B架设rsync的服务端,设定需要同步的文件夹,在A设定rsync的客户端,设定同步的来源服务器和对应的文件夹。当B的上传文件夹变动时,rsync会自动同步一份到A的客户目录。
3.当不在同一个局域网内的时候,可以在A部署一个底层脚本,用来接收post文件,可以自己设定一个密钥。当B有文件上传时,B服务器用php的curl直接重新post一份到A的接口,然后在A的接口设定逻辑存放到相应的目录。这个原理类似于各大云存储的S3逻辑。
当然,如果文件大小不是太小,B服务器还可以利用各种中转程序,例如先存到mysql,或者nosql的存储里,然后在A服务器上自动去抓取下来。 如果题主的网站不需要考虑低版本浏览器兼容性,可以采用html5的xhr2对象直接跨域上传静态文件服务器,很方便的(不逃 实时性要求不高的话一般都是跑脚本,ftp的形式,定时传。
实时性要求高的话还得看具体需求,有不同的形式和方案。 居然有人想到ftp,啧啧,再不济也是rsync啊
给你一个思路,这种模式太常见了,解决方案也很简单
1. 我们都知道上传这个操作如果在php层做的话,必定经过一个 upload_tmp_dir 配置,如你所说,上传在B上,是用户上传,符合第一条(php层)
2. 既然有tmp或者nfs,那么你其实在post表单后就拿到了一个类似 /tmp/aedg343sdsf 类似的文件,好拿到文件的思路有了
3.再说说平时我们的做法,move_uploaded_file 到B的一个配置的(nginx,apache,php都可以配置)静态文件专门存放的目录
4.这里就有思路了,既然B拿到了文件,那么就是模拟move_uploaded_file 为post到A服务器的一个接口,无非就是一个中转
5.4中说到了A接口,我们的业务有这样的需求,你可以百度下s3(我们内部类似),看看文档,他们的接口定义,无非标准的post加上一些source或者appkey等安全问题,但是你不涉及到裸露接口调用,所以可以简单来实现接口 局域网或广域网都可以这样做,原因和 @周大哥 的相同
系统为centos 7
yum -y install sshfs
echo "postgres" | sshfs postgres@IP:/opt/data /opt/data -o allow_other -ocache=no -o password_stdin
简单来就是ssh的mount
后面用sersync2定向同步 如果数据量大、用户多的话,是不是只能使用ftp上传呢 vfs
以二进制的形式进行传输,读文件也以二进制进行解码 其实你可以使用静态资源云存储,比如七牛,阿里云,使用它们的接口就能把资源上传到它们的服务器,接口十分简单,费用非常便宜,比自建资源服务器便宜很多。
基本就是,
1、图片上传到Web目录
2、使用它们API或者使用FTP上传到云存储的服务器或自己的服务器
3、在Web服务器中删除用户所上传的文件
比较麻烦,但管用。步骤可以自己再优化下。
推荐阅读
程序员
整理声明的SQL变量
如何解决《整理声明的SQL变量》经验,为你挑选了1个好方法。 ...
[详细]
程序员
如果我使用基于令牌的身份验证,我应该如何加载图像
如何解决《如果我使用基于令牌的身份验证,我应该如何加载图像》经验,为你挑选了1个好方法。 ...
[详细]
程序员
如何将字符串传递给git log -S而不是单词?
如何解决《如何将字符串传递给gitlog-S而不是单词?》经验,为你挑选了1个好方法。 ...
[详细]
程序员
只选择字符串C++中的前几个字符
如何解决《只选择字符串C++中的前几个字符》经验,为你挑选了2个好方法。 ...
[详细]
程序员
使用私钥连接到服务器时,pysftp AuthenticationException
如何解决《使用私钥连接到服务器时,pysftpAuthenticationException》经验,为你挑选了1个好方法。 ...
[详细]
程序员
如何在RxJS中完成Observable
如何解决《如何在RxJS中完成Observable》经验,为你挑选了1个好方法。 ...
[详细]
程序员
模拟自动执行的ExecutorService
如何解决《模拟自动执行的ExecutorService》经验,为你挑选了1个好方法。 ...
[详细]
程序员
家庭作业:使用指针制作数组
如何解决《家庭作业:使用指针制作数组》经验,为你挑选了1个好方法。 ...
[详细]
程序员
在URL中使用HTML中的.svg文件?
如何解决《在URL中使用HTML中的.svg文件?》经验,为你挑选了1个好方法。 ...
[详细]
程序员
标识符规范化:为什么微标志转换为希腊字母mu?
如何解决《标识符规范化:为什么微标志转换为希腊字母mu?》经验,为你挑选了1个好方法。 ...
[详细]
程序员
如何在值上膨胀对RDD?
如何解决《如何在值上膨胀对RDD?》经验,为你挑选了1个好方法。 ...
[详细]
程序员
使np.loadtxt与多个可能的分隔符一起使用
如何解决《使np.loadtxt与多个可能的分隔符一起使用》经验,为你挑选了1个好方法。 ...
[详细]
程序员
Angular显示url编码错误,如何获取解码版本?
如何解决《Angular显示url编码错误,如何获取解码版本?》经验,为你挑选了1个好方法。 ...
[详细]
程序员
元组没有属性“ isdigit”
如何解决《元组没有属性“isdigit”》经验,为你挑选了1个好方法。 ...
[详细]
程序员
如何在TensorFlow中将张量转换为numpy数组?
如何解决《如何在TensorFlow中将张量转换为numpy数组?》经验,为你挑选了4个好方法。 ...
[详细]
程序员
Xcode 7:无法使用单元测试目标创建Swift命令行工具
如何解决《Xcode7:无法使用单元测试目标创建Swift命令行工具》经验,为你挑选了1个好方法。 ...
[详细]
程序员
如何在Windows上使用Visual Studio Code设置Kestrel调试?
如何解决《如何在Windows上使用VisualStudioCode设置Kestrel调试?》经验,为你挑选了0个好方法。 ...
[详细]
程序员
Android-NavigationView从右到左
如何解决《Android-NavigationView从右到左》经验,为你挑选了2个好方法。 ...
[详细]
程序员
从列表中取出元素
如何解决《从列表中取出元素》经验,为你挑选了1个好方法。 ...
[详细]
程序员
PHP7中的foreach更改
如何解决《PHP7中的foreach更改》经验,为你挑选了1个好方法。 ...
[详细]
吐了个 "CAO" !
吐个槽吧,看都看了
会员登录
|
用户注册
N个小灰流_701
这个屌丝很懒,什么也没留下!
关注作者
Tags | 热门标签
actionscrip
bash
c#
c++
c语言
erlang
flutter
go
golang
java
javascript
lua
node.js
perl
php
python
scala
typescript
RankList | 热门文章
1
Symfony/Doctrine中的SQL注入
2
DataGridView:使用数组或List <t>添加新行
3
Chef中的动态角色属性
4
C#使用两个不同的相等比较器
5
DELPHI/ACCESS SELECT SQL ERROR
6
在jquery ajax帖子上不断收到400(Bad Request)到MVC控制器
7
org.codehaus.jackson.map.JsonMappingException:无限递归(StackOverflowError)
8
PrimeFaces commandButton在confirmDialog中没有调用backing bean
9
使用客户端证书进行SSL重新协商会导致服务器缓冲区溢出
10
如何关闭类的jquery对话框?
11
如何用Yeoman缩小Bower组件?
12
使用LINQ,获取满足分组标准的项目数
13
Sublime Text Plugin:禁用水平滚动,也不自动换行
14
node_auto_index不存在
15
在C++中进行向量推回操作的类型转换
16
Python,多处理模块,Process类,启动方法失败?启动无限的口译员:|
17
对如何使用JScover感到困惑
18
改进SQL Server查询以将任意表转换为JSON
19
将存储过程提交到SVN存储库
20
深度优先使用clojure.walk索引任何Clojure表单
DevBox开发工具箱 | 专业的在线开发工具网站
京公网安备 11010802040832号
|
京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有