如何在laravel中上传多个图像,并进行适当的验证和文件名错误

yftpprvb  于 2023-06-30  发布在  其他
关注(0)|答案(2)|浏览(150)

我想在Laravel中上传多个图像,错误显示文件名到刀片文件中。比如我想上传四个文件。其中两个是图像,另外两个是PDF文件,所以它应该阻止我这样做,因为我想只是图像上传,也会告诉我这两个PDF文件的名称是不允许的。但我得到了:

  1. The uploads.0 must be an image.
  2. The uploads.0 must be a file of type: jpeg, png, jpg, gif, svg.
  3. The uploads.2 must be an image.
  4. The uploads.2 must be a file of type: jpeg, png, jpg, gif, svg.

因此,我希望用户必须知道,到哪个文件,他们犯了错误,因为有可能上传超过20个文件,所以如果我可以打印文件名,他们可以很容易地确定哪里是问题。此外,我不能得到这个错误被打印下来的输入;我在Blade文件中使用此代码时出现此错误,

  1. @if (count($errors) > 0)
  2. <div class="alert alert-danger">
  3. <ul>
  4. @foreach ($errors->all() as $error)
  5. <li>{{ $error }}</li>
  6. @endforeach
  7. </ul>
  8. </div>
  9. @endif

因此,我希望验证应该与文件名,它应该显示在输入文件下面,因为到我的其他输入字段显示。
到我的其他输入字段我已经显示了错误与此为所有错误

  1. @if($errors->has('shipping_code'))
  2. <div class="error text-danger fs-6 fw-400">{{ $errors->first('shipping_code') }}</div>
  3. @endif

进入我的控制器

  1. public function store(Request $request) {
  2. $validator = Validator::make($request->all(),[
  3. 'shipping_code' => 'required|string',
  4. 'customer_name' => 'required|exists:users,id',
  5. 'shipper_name' => 'nullable|exists:users,id',
  6. 'shipping_details' => 'nullable|string',
  7. 'pickup_date' => 'required|date',
  8. 'delivery_date' => 'nullable|date',
  9. 'driver_name' => 'required|exists:users,id',
  10. 'driver_fee' => 'required|regex:/^\d+(\.\d{1,2})?$/',
  11. 'transaction_fee' => 'required|regex:/^\d+(\.\d{1,2})?$/',
  12. 'remarks' => 'nullable|string',
  13. 'status' => 'required|in:0,1,2,3',
  14. 'uploads' => 'required',
  15. 'uploads.*' => 'image|mimes:jpeg,png,jpg,gif,svg|max:2048'
  16. ]);
  17. if ($validator->fails()) {
  18. return redirect()->route('shipping.create')
  19. ->withErrors($validator)
  20. ->withInput();
  21. }
  22. else{
  23. DB::transaction(function () use($request) {
  24. $exPd = explode(',',$request->driver_name);
  25. $driver_id = $exPd[0];
  26. $shipping = new Shipping();
  27. $shipping->shipping_code = $request->shipping_code;
  28. $shipping->customer_id = $request->customer_name;
  29. $shipping->shipper_id = $request->shipper_name;
  30. $shipping->driver_id = $driver_id;
  31. $shipping->shipping_details = $request->shipping_details;
  32. $shipping->pickup_date = convertDateToDB($request->pickup_date);
  33. $shipping->delivery_date = convertDateToDB($request->delivery_date);
  34. $shipping->driver_fee = $request->driver_fee;
  35. $shipping->transaction_amount = $request->transaction_fee;
  36. $shipping->remarks = $request->remarks;
  37. $shipping->status = $request->status;
  38. $shipping->created_at = date('Y-m-d H:i:s');
  39. $shipping->created_by = Auth::user()->id;
  40. $shipping->save();
  41. if($request->hasfile('uploads')) {
  42. foreach($request->file('uploads') as $file)
  43. {
  44. $input['imagename'] = time().'.'.$file->extension();
  45. $filePath = public_path('/uploads/shipping_transaction_images/');
  46. $img = Image::make($file->path());
  47. $img->resize(110, 110, function ($const) {
  48. $const->aspectRatio();
  49. })->save($filePath.$input['imagename']);
  50. $imgData[] = $input['imagename'];
  51. $fileModal = new ShippingImage();
  52. $fileModal->shipping_id = $shipping->id;
  53. $fileModal->image_type = 'pickup';
  54. $fileModal->image_file = $input['imagename'];
  55. $fileModal->save();
  56. }
  57. }
  58. });
  59. return redirect()->route('shippings.index')
  60. ->with('success','Shipping Transaction Created Successfully');
  61. }
  62. }
mwg9r5ms

mwg9r5ms1#

你可以这样做你的验证:

  1. $messages = [];
  2. if($request->hasfile('uploads')){
  3. // dd($request->file('uploads'));
  4. foreach ($request->file('uploads') as $key => $file) {
  5. $messages['uploads.'.$key.'.image'] = 'The ' . $file->getClientOriginalName() . ' must be an image.';
  6. $messages['uploads.' . $key . '.mimes'] = 'The ' . $file->getClientOriginalName() . ' must be a file of type: :values.';
  7. }
  8. }
  9. $request->validate([
  10. 'shipping_code' => 'required|string',
  11. 'customer_name' => 'required|exists:users,id',
  12. 'shipper_name' => 'nullable|exists:users,id',
  13. 'shipping_details' => 'nullable|string',
  14. 'pickup_date' => 'required|date',
  15. 'delivery_date' => 'nullable|date',
  16. 'driver_name' => 'required|exists:users,id',
  17. 'driver_fee' => 'required|regex:/^\d+(\.\d{1,2})?$/',
  18. 'transaction_fee' => 'required|regex:/^\d+(\.\d{1,2})?$/',
  19. 'remarks' => 'nullable|string',
  20. 'status' => 'required|in:0,1,2,3',
  21. 'uploads' => 'required|array',
  22. 'uploads.*' => 'image|mimes:jpg,jpeg,png'
  23. ], $messages);

您可以获取其他字段的错误,如您使用的方式:

  1. @if($errors->has('shipping_code'))
  2. <div class="error text-danger fs-6 fw-400">{{ $errors->first('shipping_code') }}</div>
  3. @endif

但是对于上传,您可以使用。
如果未选择文件,则用于获取:

  1. @if ($errors->has('uploads'))
  2. <div class="help-block has-error">
  3. <strong>{{ $errors->first('uploads') }}</strong>
  4. </div>
  5. @endif

如果多个选定的文件有错误:

  1. @if($errors->has('uploads.*'))
  2. @foreach ($errors->get('uploads.*') as $message)
  3. @foreach ( $message as $value)
  4. <div class="help-block has-error">{{ $value }}</div>
  5. @endforeach
  6. @endforeach
  7. @endif

它也不会伤害你的DB::transaction。参见 * 获取laravel中失败的多个上传文件的文件名 *。

展开查看全部
0qx6xfy6

0qx6xfy62#

  1. <!doctype html>
  2. <html lang="{{ app()->getLocale() }}">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1">
  7. <title>Laravel Uploading</title>
  8. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
  9. <!-- Optional theme -->
  10. <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
  11. <!-- Fonts -->
  12. <link href="https://fonts.googleapis.com/css?family=Raleway:100,600" rel="stylesheet" type="text/css">
  13. <!-- Styles -->
  14. <style>
  15. .container {
  16. margin-top:2%;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. @if (count($errors) > 0)
  22. <div class="alert alert-danger">
  23. <ul>
  24. @foreach ($errors->all() as $error)
  25. <li>{{ $error }}</li>
  26. @endforeach
  27. </ul>
  28. </div>
  29. @endif
  30. <div class="container">
  31. <div class="row">
  32. <div class="col-md-2"> <img src="/32114.svg" width="80" /></div>
  33. <div class="col-md-8"><h2>Laravel Multiple File Uploading With Bootstrap Form</h2>
  34. </div>
  35. </div>
  36. <br>
  37. <div class="row">
  38. <div class="col-md-3"></div>
  39. <div class="col-md-6">
  40. <form action="/multiuploads" method="post" enctype="multipart/form-data">
  41. {{ csrf_field() }}
  42. <div class="form-group">
  43. <label for="Product Name">Product Name</label>
  44. <input type="text" name="name" class="form-control" placeholder="Product Name" >
  45. </div>
  46. <label for="Product Name">Product photos (can attach more than one):</label>
  47. <br />
  48. <input type="file" class="form-control" name="photos[]" multiple />
  49. <br /><br />
  50. <input type="submit" class="btn btn-primary" value="Upload" />
  51. </form>
  52. </div>
  53. </div>
  54. </div>
  55. </body>
  56. </html>
  57. // controller code
  58. <?php
  59. namespace App\Http\Controllers;
  60. use App\Item;
  61. use App\ItemDetail;
  62. use Illuminate\Http\Request;
  63. class UploadController extends Controller
  64. {
  65. public function uploadForm()
  66. {
  67. return view('upload_form');
  68. }
  69. public function uploadSubmit(Request $request)
  70. {
  71. $this->validate($request, [
  72. 'name' => 'required',
  73. 'photos'=>'required',
  74. ]);
  75. if($request->hasFile('photos'))
  76. {
  77. $allowedfileExtension=['pdf','jpg','png','docx'];
  78. $files = $request->file('photos');
  79. foreach($files as $file){
  80. $filename = $file->getClientOriginalName();
  81. $extension = $file->getClientOriginalExtension();
  82. $check=in_array($extension,$allowedfileExtension);
  83. //dd($check);
  84. if($check)
  85. {
  86. $items= Item::create($request->all());
  87. foreach ($request->photos as $photo) {
  88. $filename = $photo->store('photos');
  89. ItemDetail::create([
  90. 'item_id' => $items->id,
  91. 'filename' => $filename
  92. ]);
  93. }
  94. echo "Upload Successfully";
  95. }
  96. else
  97. {
  98. echo '<div class="alert alert-warning"><strong>Warning!</strong> Sorry Only Upload png , jpg , doc</div>';
  99. }
  100. }
  101. }
  102. }
  103. }?>
  104. //file storing code
  105. return [
  106. 'default' => 'local',
  107. 'disks' => [
  108. 'local' => [
  109. 'driver' => 'local',
  110. 'root' => storage_path('app'),
  111. ],
展开查看全部

相关问题