我目前正在编写中间件,以检测何时上传文件以对其进行操作。目的是检测应用程序上高度或宽度大于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);
}
}
语句中,我将如何替换请求中的图像,然后返回它,以便当我的控制器处理该图像时,它可以处理新调整大小的图像?
答案 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]);
}
}
}