php能否向另外一台服务器上传文件,PHP如何将图片文件上传到另外一台服务器上.pdf...

在A项目中通过PHP调用B项目图片上传接口遇到跨域问题。已尝试在PHP入口文件设置CORS头,但前端JS仍报错。考虑通过PHP作为中介,接收前端参数并转发请求到B项目。已验证B项目接口有效,计划实现PHP转发文件上传功能。
摘要由CSDN通过智能技术生成

PHP如如何何将将图图片片文文件件上上传传到到另另外外一一台台服服务务器器上上

说,我有一个需求,就是一个临时功能 由于工作开发问题,我们有一个B项目,需要有一个商品添加的功能,涉及到添加

商品内容,比如商品名字,商品描述,商品库存,商品图片等 后台商品添加的接口已经写完了,但是问题是目前没有后台页面

,就是产品还没有出后台详细页面 前端已经完备了,上线了 后台还需要工作时间处理 所以目前的处理方法是在我们已经存

在的A项目后台中,添加一个对B项目添加商品的功能

一一、、当当下下问问题题

1、在我们已有的A项目中,新增一个添加商品的功能,这个本来是没有什么问题的,因为目前A项目中本身就已经连接了B

项目的数据库,所以商品属性的新增和修改都没什么问题 主要是商品图片的上传这里,有点问题 B项目已经对外提供了上传

图片的接口,但是由于我确实对前端不是特别熟悉 所以在A项目中的后台JS中调取B项目的上传图片的接口时,一直提示"COR

S",这里应该是存在一个跨域的问题,虽然我PHP接口端已经对跨域做了处理 (入口文件处),但是貌似JS这边也需要相应的调

// [ 应用入口文件 ]

//入口文件index.php

namespace think;

// 加载基础文件

require __DIR__ . '/thinkphp/base.php';

// 支持事先使用静态方法设置Request对象和Confi 对象

header("Access-Control-Allow-Ori in: *");

header("Access-Control-Allow-Headers: Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE,au

thorization");

// 执行应用并响应

Container:: et('app')->bind('api')->run()->send();

2、无奈小白JS功底不够扎实,所以我这边准备通过A项目中调取后台PHP接口,然后通过在PHP代码中接受web端参数,然

后再转发,调取B项目中上传图片的接口,试图完成功能 于是先通过Postman接口工具测试了一下B项目上传图片的接口是否有

效 如图3,发现确实没有什么问题,于是就准备如此处理

3、但是实际是,在调取时,我们常用的传参数方式是GET或者POST方式,但是我们知道文件上传是通过$_FILES接受,下

面是B项目的上传图片的控制器代码 (用的是TP .1),接受是通过内置的file方式

/**上传图片

* @param Request $request

*/

public function uploadIm (Request $request){

$file = $request->file('ima e');

$type = $request->post('type', 0);

// 移动到框架应用根目录/uploads/ 目录下

$upload_path = confi ('common.upload_path');

switch ($type) {

case 1://门店

$path = $upload_path['shop_im '];

break;

case 2://投票活动

$path = $upload_path['vote_im '];

break;

case 3://投票活动参赛图片

$path = $upload_path['vote_contestant_im '];

break;

case 4 ://会员店铺lo o图片

$path = $upload_path['member_shop'];

break;

case 5://自营商品图片

$path = $upload_path['self_ oods'];

break;

dropzone.js 上传的文件默认是保存在浏览器的缓存中,你可以通过设置 `autoProcessQueue` 属性为 `true`,即自动提交队列,将文件传输到服务器后端进行保存。 具体步骤如下: 1. 在 HTML 中设置一个 `form` 表单,设置 `enctype="multipart/form-data"`。 2. 创建一个 Dropzone 实例,并配置相关属性。例如: ```javascript var myDropzone = new Dropzone("#my-dropzone", { url: "/file/upload", // 文件上传的后台接口 autoProcessQueue: true, // 是否自动将文件传输到服务器 paramName: "file", // 文件参数名,后端可以通过这个参数名获取文件 maxFilesize: 2, // 最大文件大小限制 addRemoveLinks: true, // 添加移除文件链接 acceptedFiles: "image/*,application/pdf", // 允许上传的文件类型 dictDefaultMessage: "将文件拖到此处上传或者点击上传", // 默认提示信息 dictFallbackMessage: "您的浏览器不支持拖放文件上传", // 不支持拖放上传的提示信息 dictFileTooBig: "文件过大 ({{filesize}}MiB),最大上传大小: {{maxFilesize}}MiB.", // 文件过大的提示信息 dictInvalidFileType: "无法上传此类型的文件", // 不允许上传的文件类型的提示信息 dictResponseError: "服务器响应错误 {{statusCode}}.", // 服务器响应错误的提示信息 dictCancelUpload: "取消上传", // 取消上传按钮的提示信息 dictCancelUploadConfirmation: "您确定要取消上传吗?", // 确认取消上传的提示信息 dictRemoveFile: "移除文件", // 移除文件按钮的提示信息 dictMaxFilesExceeded: "只能上传 {{maxFiles}} 个文件", // 超过最大文件数量限制的提示信息 headers: {"Authorization": "Bearer " + token} // 设置请求头,例如 token }); ``` 3. 在后端接口中,可以通过常规方式(如 PHP 中的 `move_uploaded_file` 函数)将文件保存到服务器中指定的路径。 例如: ```php <?php $targetDir = "/var/www/html/uploads/"; // 文件保存的目标路径 if (!empty($_FILES)) { $tempFile = $_FILES["file"]["tmp_name"]; $targetFile = $targetDir . $_FILES["file"]["name"]; move_uploaded_file($tempFile, $targetFile); // 将文件从临时目录移动到目标路径 echo "success"; } ?> ``` 4. 在前端中,可以监听 Dropzone 的 `success` 或 `error` 事件,以判断文件上传是否成功。例如: ```javascript myDropzone.on("success", function(file, response) { console.log(response); // 打印上传成功后的响应结果 }); myDropzone.on("error", function(file, errorMessage) { console.log(errorMessage); // 打印上传失败的错误信息 }); ``` 以上是一个基本的使用 Dropzone.js 上传文件并保存到服务器的流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值