【问题标题】:Image upload issue in laravellaravel 中的图片上传问题
【发布时间】:2019-11-20 07:54:36
【问题描述】:

我已成功上传此格式(jpeg、png、gif)但不是 jpg 格式未上传。

public function store(Request $request)
{
  $images = array();
  if($request->hasFile('images')){
    foreach ($request->file('images') as $image) {
        $path = $image->store('images');
        $images[] = $path;
    }
  }
  dd($request->file('images'));
}

我的问题就是这样!为什么JPG格式无法上传。

编辑 删除以下内容:

 array:1 [▼
    0 => UploadedFile {#264 ▼
    -test: false
    -originalName: "home.jpg"
    -mimeType: "application/octet-stream"
    -error: 1
    #hashName: null
    path: ""
    filename: ""
    basename: ""
    pathname: ""
    extension: ""
    realPath: "/home/vic/dev/project/client/ccity/public"
    aTime: 1970-01-01 00:00:00
    mTime: 1970-01-01 00:00:00
    cTime: 1970-01-01 00:00:00
    inode: false
    size: false
    perms: 00
    owner: false
    group: false
    type: false
    writable: false
    readable: false
    executable: false
    file: false
    dir: false
    link: false
  }
]

【问题讨论】:

  • 这段代码中没有任何内容可以排除任何文件类型
  • 几天前遇到了同样的问题。经过一整天的调试,我意识到php.ini 配置中的max_upload_size 不足以容纳我上传的图像。我认为默认是2MB,所以这可能是你的问题。把它变大再试一次。
  • 在@zlatan 建议之前,尝试上传一个小的jpg 文件以确认这是文件大小问题
  • 这能回答你的问题吗? stackoverflow.com/questions/45775532/…
  • 这项工作就像魔术一样,但它是 php 7 中的 upload_max_filesize。谢谢@zlatan

标签: php laravel


【解决方案1】:

你应该添加

$this->validate($request, [
    'images'             => 'required|image|mimes:jpeg,png,jpg,gif'
 ])

【讨论】:

    【解决方案2】:

    通过添加以下内容检查您的刀片文件:

    <input type="file" accept="image/*" /> <!-- all image types --> 
    

    【讨论】:

    • 这不是一个好的解决方案,因为可以使用浏览器开发工具轻松修改 DOM。服务器端是真正的交易。更好的解决方案是结合客户端和服务器端验证。
    【解决方案3】:

    让我引导您完成每一步,这样您就不会错过任何事情。

    第 1 步:创建一个控制器来显示表单并处理文件上传

    class FileUploadController extends Controller
    {
        public function showUploadForm(){
            return view('form');
        }
    
        public function upload( Request $request ){
    
            $this->validate( $request, [
                'images' => 'required',
                'images.*' => 'image|mimes:jpeg,png,jpg,gif'
            ]);
    
            $images = [];
    
            foreach($request->file('images') as $image){
                $images[] = $image->store('image');
            }
    
        }
    }
    

    第 2 步:在 web.php 文件中定义路由:

    Route::get('/upload', 'FileUploadController@showUploadForm');
    Route::post('/upload', 'FileUploadController@upload');
    

    第 3 步:文件上传表单:

    <form action="/upload" enctype="multipart/form-data"  method="post">
        @csrf
        <input type="file" name="images[]" multiple>
        <button>Upload</button>
    </form>
    

    现在如果你上传一个或多个文件,它们都应该上传到storage/app/images/目录。

    注意: 不要忘记在php.ini 文件上确定upload_max_filesize 的值。您可以指定一些更大的值,以便轻松上传大文件。

    如果您仍然需要这方面的帮助,请告诉我。

    【讨论】:

      【解决方案4】:

      如果您要验证数据,请确保将 |image| 替换为 |mimes:..|。如下

      $this->validate($request, [
          'images'             => 'required|mimes:jpeg,png,jpg,gif'
       ])
      

      请注意,我在验证图像时没有使用|image|,而是使用mimes:jpeg,png,jpg,gif,因为出于某种原因|Image| 接受除jpg/jpeg 之外的所有图像格式。 编码愉快!

      【讨论】:

      • 这没有回答问题。请考虑将其转换为评论。
      猜你喜欢
      • 2020-07-08
      • 2017-03-13
      • 2015-08-13
      • 2020-11-16
      • 2019-04-24
      • 2021-07-19
      • 2021-09-29
      • 1970-01-01
      相关资源
      最近更新 更多