如何实现远程服务器PDF文件直接上传至自有服务器
问题答复
这个需求完全可以实现,全程不需要把PDF下载到本地电脑再手动上传,核心是让你的自有服务器直接去远程发票服务器拉取文件,文件流只在两台服务器之间传输,和你本地设备没有关系。
具体实现方式
- 手动触发的轻量方案
你可以先在自有服务器上写一个简单的接口,接口逻辑就是接收传入的PDF链接参数,由服务端发起HTTP请求访问这个链接,拿到返回的PDF文件流后直接写入服务器的存储路径就行。
你拿到第三方推的发票链接后,不用下载文件,只要直接访问你自己的这个接口、把PDF链接当参数传过去,服务器就会自动把文件存好。
以PHP为例,核心代码逻辑非常简单:
如果对方的PDF链接有访问时效、防盗链鉴权要求,你在服务端发起拉取请求的时候,把对应的鉴权Token、Cookie信息加到请求头里就行,不会影响拉取。// 接收传入的远程PDF地址 $pdfUrl = $_REQUEST['pdf_url']; // 简单校验链接合法性,避免恶意请求 if (!filter_var($pdfUrl, FILTER_VALIDATE_URL)) { exit("链接格式错误"); } // 服务端直接拉取文件流,写入本地存储 $stream = file_get_contents($pdfUrl); // 自定义存储路径和文件名,建议按发票日期、编号命名方便后续查找 $savePath = "./invoice_storage/" . date("YmdHis") . ".pdf"; file_put_contents($savePath, $stream); echo "发票已成功保存到服务器"; - 全自动无感方案
如果给你推发票的服务支持配置Webhook回调地址,你直接把上面写好的接口地址填到回调配置里就行。以后对方每次生成新发票,会自动把PDF链接推到你的接口,服务器自动完成拉取存储,全程不需要你做任何手动操作。 - 网页端操作方案
如果你觉得传参数访问接口麻烦,可以在自己的站点做个极简表单,就一个输入框加提交按钮,你把拿到的PDF链接粘到输入框点提交,表单把链接发给后端走上面的拉取逻辑就行,整个提交过程只传输几KB的链接文本,不会把PDF文件下载到你本地。
避坑提醒:别尝试用前端JavaScript直接拉取远程PDF再上传到你的服务器,这种方式文件会经过你本地浏览器的缓存,本质还是走了本地中转,还大概率会碰到跨域限制,所有拉取操作放在服务端执行就能完全避开这个问题。
内容的提问来源于stack exchange,提问作者William Orellana
相关产品推荐
相关产品推荐

