【问题标题】:How to return the inserted image using ajax request in laravel?如何在 laravel 中使用 ajax 请求返回插入的图像?
【发布时间】:2017-09-06 09:40:45
【问题描述】:

查看代码:

<form  enctype="multipart/form-data"  name="imagesform" id="imagesform" 
action="{{url('upload')}}" method="post" >
{{ csrf_field() }}
<input name="images[]" type="file" multiple>
<button type="submit"  class="save" id="saveImage" style="border-
radius: 8px; padding: 5px 15px;">SAVE</button>
</form>

这是 laravel 视图代码。这里我尝试将多张图片上传到数据库中。

AJAX 代码:

  <script type="text/javascript">
  $(document).ready(function(){

  $("#imagesform").submit(function(){


  $.ajaxSetup({
      headers: { 'X-CSRF-TOKEN': 
  $('meta[name="_token"]').attr('content') }
  });
  $.ajax({
      url      :"{{url('upload')}}",
      type: 'POST',
      data:new FormData($("#imagesform").get(0)),
      contentType:false,
      processData:false,
      success: function (data) {
         **$("#insertedImages").html(data);**  
         alert("Uploaded OK!")
      },

  });
  return false;
  });
   });

 </script>

这是我存储图像的 ajax 请求。另外,我正在尝试显示那些添加的图像(标记为块)。

控制器代码:

public function uploadSubmit(UploadRequest $request)
{
    $product = Product::create($request->all());
    foreach ($request->images  as $photo) {
       $filename = $photo->store('uploadedImages');
       $filename=substr($filename,15);

        ProductsPhoto::create([
            'product_id' => $product->id,
            'filename' => $filename
        ]);
    }

      return $filename;


   }

这是我的控制器,用于插入这些图像数组并返回相同的图像。但是,它只显示图像的名称。 ie.,eZrcSTlkCeGez8Dq6pTW5X1yLUA080W5UamQEfXk.png..我不想像这样显示,而是想显示图像。

图片展示:

  <div id="insertedImages"></div>

这是我给显示图像的。

【问题讨论】:

  • 使用img标签并在src使用文件路径
  • 我可以简单地给uploadedImages/ in src
  • 你也需要一个文件名。或者您可以输出为 base64 字符串而不是文件路径。
  • &lt;img src="{{asset(Storage::url('uploadedImages/' . $filename))}}" width="100" height="100" id="insertedImages"&gt;
  • 是这样吗??

标签: php jquery ajax image laravel-5.4


【解决方案1】:

首先,您要上传一组图像并返回一个变量,该变量仅返回最后一个上传文件的名称。而是创建并返回上传文件的文件名数组。

public function uploadSubmit(UploadRequest $request)
{
    $product = Product::create($request->all());
   $filenames = array();
    foreach ($request->images  as $photo) {
       $filename = $photo->store('uploadedImages');
       $filename = substr($filename,15);
       $filenames[] = asset('storage/app/uploadedImages/'.$filename);
        ProductsPhoto::create([
            'product_id' => $product->id,
            'filename' => $filename
        ]);
    }

      return response()->json($filenames);
   }

然后确保运行php artisan storage:link 以在public 目录中创建storage 目录的符号链接。

<script type="text/javascript">
  $(document).ready(function(){

  $("#imagesform").submit(function(){


      $.ajaxSetup({
          headers: { 'X-CSRF-TOKEN': 
      $('meta[name="_token"]').attr('content') }
      });
      $.ajax({
          url      :"{{url('upload')}}",
          type: 'POST',
          data:new FormData($("#imagesform").get(0)),
          contentType:false,
          processData:false,
          success: function (data) {
            $.each(data, function( index, value ) {
               $("#insertedImages").append('<img src="'+value+'">');
             });
          },

      });
      return false;
      });
       });

     </script>

【讨论】:

  • 好的。我会试着让你知道
  • 在这里,当我只是提醒data 它会提醒url value 就像http:\\localhost..\app\uploadedImages\fsfnskhiu.png 一样
  • 所以将值放在img src 属性中
  • 文件上传到uploadedFiles了吗?
  • uploadedImages ??
【解决方案2】:

如果您在 ajax 中获取 image_name,您可以将其与完整的图像路径连接

<script type="text/javascript">
  $(document).ready(function(){

  $("#imagesform").submit(function(){


  $.ajaxSetup({
      headers: { 'X-CSRF-TOKEN': 
  $('meta[name="_token"]').attr('content') }
  });
  $.ajax({
      url      :"{{url('upload')}}",
      type: 'POST',
      data:new FormData($("#imagesform").get(0)),
      contentType:false,
      processData:false,
      success: function (data) {
          var img = '<img src="{{asset(Storage::url('uploadedImages'))}}/'+data+'" width="100" height="100" id="insertedImages">';
         $("#insertedImages").html(img);  
         alert("Uploaded OK!")
      },

  });
  return false;
  });
   });

 </script>

【讨论】:

  • sry,图片未显示
  • 但现在我的网址是http://localhost/AdminPanel/public/storage/uploadedImages/fMSgH4PjuXrz6o5EW8CXjbxHTPX7v5CVrnPiHkBT.png
  • 我的图片存储路径是storage/app/uploadedImages
  • 如果它在app目录中,则在url中添加appStorage::url('app/uploadedImages')
  • 添加,但没有变化
猜你喜欢
  • 2018-02-07
  • 2021-05-08
  • 1970-01-01
  • 2018-05-11
  • 2016-02-22
  • 1970-01-01
  • 2020-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多