根据大小调整并替换Laravel请求中的所有文件

时间:2018-10-03 15:08:29

标签: php laravel laravel-5 middleware

我目前正在编写中间件,以检测何时上传文件以对其进行操作。目的是检测应用程序上高度或宽度大于500px的任何/所有图像,如果确实如此,则在允许请求继续之前对其进行调整。

目前,我具有带有此图像循环的中间件

"dependencies": {
    "@angular/animations": "^4.2.5",
    "@angular/common": "4.1.0",
    "@angular/compiler": "4.1.0",
    "@angular/compiler-cli": "4.1.0",
    "@angular/core": "4.1.0",
    "@angular/forms": "4.1.0",
    "@angular/http": "4.1.0",
    "@angular/platform-browser": "4.1.0",
    "@angular/platform-browser-dynamic": "4.1.0",
    "@ionic-native/core": "^3.7.0",
    "@ionic-native/date-picker": "^4.6.0",
    "@ionic-native/file": "^4.11.0",
    "@ionic-native/file-transfer": "^4.11.0",
    "@ionic-native/globalization": "^4.7.0",
    "@ionic-native/local-notifications": "^4.5.3",
    "@ionic-native/mixpanel": "^4.6.0",
    "@ionic-native/network": "^4.9.1",
    "@ionic-native/social-sharing": "^4.5.3",
    "@ionic-native/splash-screen": "3.7.0",
    "@ionic-native/status-bar": "3.7.0",
    "@ionic-native/video-player": "^4.5.3",
    "@ionic/storage": "2.0.1",
    "angularfire2": "^5.0.0-rc.11",
    "cordova-android": "7.0.0",
    "cordova-ios": "^4.4.0",
    "cordova-plugin-badge": "^0.8.7",
    "cordova-plugin-console": "^1.0.5",
    "cordova-plugin-datepicker": "^0.9.3",
    "cordova-plugin-device": "^1.1.4",
    "cordova-plugin-file": "^6.0.1",
    "cordova-plugin-file-transfer": "~1.7.1",
    "cordova-plugin-globalization": "^1.11.0",
    "cordova-plugin-ionic-webview": "^1.1.16",
    "cordova-plugin-local-notification": "^0.9.0-beta.2",
    "cordova-plugin-mixpanel": "^4.2.0",
    "cordova-plugin-network-information": "^2.0.1",
    "cordova-plugin-splashscreen": "^4.0.3",
    "cordova-plugin-statusbar": "^2.2.3",
    "cordova-plugin-whitelist": "^1.3.1",
    "cordova-plugin-x-socialsharing": "^5.3.2",
    "es6-promise-plugin": "^4.2.2",
    "express": "^4.16.3",
    "firebase": "^5.3.0",
    "ionic-angular": "3.2.1",
    "ionic-plugin-keyboard": "^2.2.1",
    "ionic2-rating": "^1.2.2",
    "ionicons": "3.0.0",
    "ng-socket-io": "^0.2.4",
    "rxjs": "5.1.1",
    "socket.io": "^2.0.4",
    "sw-toolbox": "3.6.0",
    "zone.js": "0.8.10"
},
"devDependencies": {
    "@ionic/app-scripts": "1.3.7",
    "typescript": "2.2.1"
}

在我的class CheckImageSizes { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { //Get each of the files that are being uploaded in the request, if there are no files this will just be ignored. foreach (array_flatten($request->files->all()) as $file) { $image = Image::make($file); if($image->height() > 500 || $image->width() > 500){ $image->resize(500, null, function ($constraint) { $constraint->aspectRatio(); }); //Replace the image inside the request with the new $image here } } return $next($request); } } 语句中,我将如何替换请求中的图像,然后返回它,以便当我的控制器处理该图像时,它可以处理新调整大小的图像?

1 个答案:

答案 0 :(得分:1)

您可以将图像添加到请求中,如下所示:

$request->merge([
    'image' => $image
]);

https://laravel.com/api/5.7/Illuminate/Http/Request.html#method_merge

检查输入是否为文件:

foreach ($request->all() as $key => $item) {
    if ($item instanceof UploadedFile) {
        $image = Image::make($item);
        if($image->height() > 500 || $image->width() > 500){
            $image->resize(500, null, function ($constraint) {
                $constraint->aspectRatio();
            });
            $request->merge([$key => $image]);
        }
    }
}