php - 我从 Postman 上传到 Laravel API 的图像未保存在文件夹中
问题描述
尝试从 Postman 上传图像时,我发送的图像未保存在 Heroku 上的 API 文件夹中。但它存储在某个地方,因为当我使用asset()
并打开该链接时,它会正确显示图像。
该路线用于创建产品,图像与之对应:
路线:
Route::post('product/new','ProductController@store');
在我的控制器中:
$product = new Product;
$product->name = $request->input('name');
//Other staff
if($request->file('image')){
$path = Storage::disk('public')->put('uploads/images/products',$request->file('image'));
// $product->image = $path;
$product->image = asset($path);
}
邮递员配置:
我已经尝试使用x-www-form-urlencoded
、 内容类型multipart/form-data
和没有任何内容类型来配置内容类型标头,但它们都不起作用。
我得到的结果是:
{
"id": 1,
"name": "test1",
//staff
"image": "http://{{my_API_domain}}/uploads/images/products/Mz9liaazzCOTwt8CdEWK0My6w3l2GWzR1ERDncCV.png",
}
如果我从浏览器进入http://{{my_API_domain}}/uploads/images/products/Mz9liaazzCOTwt8CdEWK0My6w3l2GWzR1ERDncCV.png
,该链接会很好地显示图像,但如果我去那里检查:public/uploads/images/products/
没有保存的图像,不知道这些图像存储在哪里。
另外,我确实运行php artisan storage:link
了并且符号链接文件夹存储在 中创建得很好public/
,但是只有在.gitignore
里面,我
config/filesystem.php
将'public' => [ 'root' => storage_path('app/public'),]
'public' => [ 'root' => public_path(),]
我的文件结构:
解决方案
我不确定您的文件存储在哪里,但更大的问题是您首先将文件保存到本地文件系统。即使您弄清楚文件的去向,这也不会按预期工作。
Heroku 的文件系统是短暂的。下次重新启动测功机时,您对其所做的任何更改都将丢失。这种情况经常发生(至少每天一次)。Heroku建议将上传的文件存储在 Amazon S3 等第三方服务上。
幸运的是,Laravel 开箱即用地支持这一点:
- 添加
league/flysystem-aws-s3-v3 ~1.0
到您的依赖项 - 创建 S3 存储桶
- 配置 Laravel 以使用存储桶
config/filesystems.php
您无需对上传代码进行任何更改。文件现在应该会自动保存到您的 S3 存储桶中,让它们在 dyno 循环和新部署中存活下来。
推荐阅读
- android - 更新颤振 SDK 2.0 后出现错误 DiagnosticableMixin
- vbscript - .Exec 或 .ShellExecute 在脚本继续之前等待指定进程终止吗?
- java - 如何使用 Spring Specification 过滤多对多关系?
- atom-editor - 为什么我不能在项目树关闭的情况下将左/右面板聚焦在 atom 中?
- javascript - React Native,如何让倒计时在后台运行
- python - tkinter 中的 get() 和 update() 不起作用
- google-app-engine - 使用 Django Rest Framework 中的不同帐户从不同项目连接到云 sql 项目
- android - Android 应用未实时连接到 Firebase 数据库
- r - rep(value, length.out = n) 中的错误:尝试复制“closure”类型的对象
- three.js - 在自定义着色器中包含凹凸贴图/镜面贴图