php跨域上传文件,laravel文件上传接口跨域问题

这篇博客探讨了在Laravel中遇到的文件上传接口跨域问题。当前端添加进度条时,会触发两个请求,导致跨域错误。解决方案包括在中间件中设置允许跨域的响应头,允许任何方法(ANY),并将上传文件的路由配置为接受所有请求类型,从而确保POST和OPTIONS请求都能正确处理。通过这些调整,成功解决了Laravel文件上传接口的跨域问题。
摘要由CSDN通过智能技术生成

laravel文件上传接口跨域问题

laravel上传文件 直接post就可以了 但是前端加进度条就会显示跨域!

经过排查vue pc的页面上传图片会有两个请求一个post请求一个options请求! post请求正常 但是options请求就出问题了~ 下边是解决方案:#我的跨域代码都在中间件中

header('Access-Control-Allow-Origin: *');

header("Access-Control-Allow-Credentials: true");

header("Access-Control-Allow-Methods: *");

header('Access-Control-Allow-Headers: Origin, Access-Control-Request-Headers, SERVER_NAME, Access-Control-Allow-Headers, cache-control, token, X-Requested-With, Content-Type, Accept, Connection, User-Agent, Cookie, X-XSRF-TOKEN');

if($request->getMethod() !== 'OPTIONS') {

header("Access-Control-Expose-Headers: *");

}

其次把上传文件的路由改为any 什么请求都可以! 因为两个请求都会走这个路由 如果只用post options请求就请求不同~

ok 这次的laravel文件上传的跨域问题就解决了~

laravel文件上传接口跨域问题

PHP 中,处理多张图片上传以及生成预览图,并考虑到跨域问题,你需要做以下几个步骤: 前端(HTML + JavaScript + AJAX): ```html <!-- 使用HTML5的FormData --> <form id="uploadForm" enctype="multipart/form-data"> <input type="file" multiple name="images[]" accept="image/*" onchange="previewFiles()"> <div id="preview"></div> <button type="submit">Upload</button> </form> <script> function previewFiles() { // 预览文件 const input = document.querySelector('#images'); const previewContainer = document.getElementById('preview'); input.files.forEach(file => { const reader = new FileReader(); reader.onload = (event) => { previewContainer.innerHTML += `<img src="${event.target.result}" alt="${file.name}">`; }; reader.readAsDataURL(file); }); } // 跨域上传AJAX $.ajax({ url: 'upload.php', type: 'POST', data: new FormData(document.getElementById('uploadForm')), processData: false, contentType: false, xhr: function() { return new XMLHttpRequest(); }, xhrFields: { withCredentials: true, // 如果服务器需要的话,设置跨域发送Cookie }, success: function(data) { console.log(data); } }); </script> ``` 后端(PHP - 使用 Laravel 或者原生 PHP 示例): ```php // upload.php (Laravel) use Illuminate\Http\Request; use Intervention\Image\Facades\Image; public function store(Request $request) { $files = $request->file('images'); foreach ($files as $file) { // 文件名保存和存储 $filename = time() . '-' . $file->getClientOriginalName(); $file->move(public_path('uploads'), $filename); // 图片处理并生成缩略图 $image = Image::make(public_path('/uploads/' . $filename)); $thumbnailPath = public_path('/uploads/thumbnails/' . $filename); $image->resize(300, null, function ($constraint) { $constraint->aspectRatio(); })->save($thumbnailPath); } // 返回响应,例如JSON return response()->json(['status' => 'success', 'message' => 'Images uploaded successfully']); } // 或者原生 PHP 示例 if ($_SERVER['REQUEST_METHOD'] == 'POST') { $dir = 'uploads/'; if (!is_dir($dir)) { mkdir($dir, 0777, true); } foreach ($_FILES['images']['tmp_name'] as $key => $tmp_name) { $file_info = pathinfo($_FILES['images']['name'][$key]); $new_file_name = $file_info['basename']; move_uploaded_file($tmp_name, $dir . '/' . $new_file_name); // 缩略图处理 list($width, $height) = getimagesize($dir . '/' . $new_file_name); imagecreatetruecolor(300, min(300, $height / $width * $width)); // 创建新的图像资源 $source = imagecreatefromjpeg($dir . '/' . $new_file_name); // 加载原始图片 imagecopyresampled($dest, $source, 0, 0, 0, 0, 300, min(300, $height), $width, $height); // 缩放并保存到新位置 imagejpeg($dest, $dir . '/thumbnails/' . $new_file_name); } // 返回响应,例如JSON echo json_encode(['status' => 'success', 'message' => 'Images uploaded successfully']); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值