当前位置: 首页 > 知识库问答 >
问题:

将图像上载到my Laravel 6应用程序的DB表和公用文件夹中不起作用

濮阳原
2023-03-14

我正在写Laravel登记表。表单上载带有验证的用户配置文件图像。此映像应插入数据库中的附件表和PhpStorm中的公用文件夹中。

下面是我做过但根本不起作用的代码。任何帮助,都是高度赞赏。

上载文件控制器:

class UploadFileController extends Controller
{

public function store($request)
{
    $attachment = new Attachment();
    $attachment->mime = $request->mime;
    $attachment->size = $request->size;
    $attachment->name = $request->name;
    $attachment->original_name = $request->original_name;
    $attachment->attachment_type = $request->attachment_type;
    $attachment->attachment_id = $request->attachment_id;
    $attachment->save();
    return $attachment;
}

public function action(Request $request)
{

    $validation = Validator::make($request->all(),[
        'file' => '
        required|image|mimes:jpeg, png, jpg, gif|max:2048'
    ]);
    if($validation->passes())
    {
        $image = $request->file('file');
        $new_name = rand() . '.' . $image->getClientOriginalExtension();
        $image->move(public_path('/files'), $new_name );
        return response()->json([
            'message'        => 'File Uploaded Successfully',
            'uploaded_image' => '<img src="/files/'.$new_name.'" class="img-thumbnail" width="300" />',
            'class_name'   => 'alert-success'
        ]);
    }
    else
    {
        return response()->json([
            'message'        => $validation->errors()->all(),
            'uploaded_image'   => '',
            'class_name'     => 'alert_danger'
        ]);
    }
}

上传模式:

use Illuminate\Database\Eloquent\Model;

class Upload extends Model
{
   protected $table = 'attachments';
   protected $fillable = ['mime', 'size', 'name', 'original_name'];
}

附件模型:

class Attachment extends Model
{
     public function attach()
     {
       return $this->morphTo('App\User', 'attachable');
     }
 }

我验证表单的用户控制器:

class UserController extends Controller

    protected function getValidator(Request $request)
    {
    $rules =  [  
        'first_name' => 'required|string|max:50',
        'last_name' => 'required|string|max:50',
        'email' => 'required|email|unique:users',
        'phone' => 'required|numeric', //phone should be numeric

        'name' => 'required',
        'country' => 'required',
        'address' => 'required',
        'image' => 'required',
    ];

    if(request('country') == $TajikistanID) {
        $rules['province'] = 'required';
    } else {
        $rules['city'] = 'required';
    }

    return Validator::make($request->all(), $rules);
}

这是登记表:

<form action="{{ route('users.store') }}" method="POST" enctype="multipart/form-data">
    {{csrf_field()}} //rest of input fields

    <input type="file" id="image" name="image" value="" class="form-control" />
    <input type="hidden" name="_token" value="{{ csrf_token()" />

</form>

共有1个答案

燕璞
2023-03-14

文件上载输入字段的名称属性设置为图像,但在代码中,您将文件用作值。由于此原因,laravel无法访问上载的图像。

您需要将文件上传输入字段的name属性更改为file,如下所示:

<input type="file" id="image" name="file" value="" class="form-control" />

或者您不更改file upload输入元素的名称,而是更改PHP代码,如下所示:

// Validation
$validation = Validator::make($request->all(),[
  'image' => 'required|image|mimes:jpeg, png, jpg, gif|max:2048'
]);
// Upload
$image = $request->file('image');

代码提示:不要使用HTML元素作为Api的响应。那很难看,也没用。只需返回图像的路径,如下所示:

return response()->json([
  'message'        => 'File Uploaded Successfully',
  'uploaded_image' => '/files/' . $new_name,
  'class_name'   => 'alert-success'
]);

超文本标记语言是前端的一部分,而不是其他API。

 类似资料:
  • 问题内容: 我有一个UIImageView,它允许用户放置并保存图像,直到可以保存为止。问题是,我不知道如何实际保存和检索放置在视图中的图像。 我已经将图像检索并放置在UIImageView中,如下所示: 它在我的UIImageView中显示选定的图像就很好了,但是我不知道如何保存它。我将视图的所有其他部分(主要是UITextfield)保存在Core Data中。我已经搜索了很多,然后尝试了很多

  • 当我试图通过Maven部署插件将JHipster应用程序部署到Nexus时,我得到以下错误。 无法执行目标组织。阿帕奇。专家插件:maven deploy插件:2.7:project profiletoolservice上的部署(默认部署):未能部署工件:无法传输工件io。众码。prf:profiletoolservice:war:1.0.0-20180209.081617-4从/到回购。众码。i

  • 我是ReactJS的新手,我想在组件中导入图像。这些图像在公用文件夹中,我不知道如何从react组件访问该文件夹。 有什么想法吗? 编辑 我想在bottom.js或header.js中导入一个图像 结构文件夹为: 我不使用WebPack。我应该吗? 编辑2 我想使用webpack来加载图像和其他资产。因此,在我的配置文件夹中,我有下一个文件: 我需要在哪里添加图像的路径,以及如何添加? 谢谢

  • 我在我的Android应用程序中使用滑翔进行图像加载,以避免任何崩溃,我正在加载带有应用程序上下文的图像。这会对应用程序和内存的性能产生什么影响?

  • 我正在尝试访问src文件夹中的js文件中的公用文件夹中的映像?更具体地说,我正在设计一个div容器。我想将其backgroundImage属性设置为公用文件夹中的图像文件。我该怎么做呢?感谢您的回复!

  • 为了开始使用react,我在我的节点应用程序中添加了Webpack和Babel。我将所有脚本导入一个脚本,并将其设置为webpack.config.js中的条目,如下所示: 当启动webpack-dev-server时,脚本无法找到位于我的公共文件夹中的图像(该文件夹被指定为服务器index.js中的静态文件夹)。我试着在输出中添加公共路径:“/公共/”,但它甚至找不到app.js了。在Webpa