[英]Why nginx won't work with base64 image in AJAX request (Laravel, Javascript, Nginx)
All other AJAX requests (signIn, SignUp, basicInformation, educationDetail etc) successfully done, but when I upload profile picture (base64) and send to laravel controller then nginx server doesn't work and return error... I don't know where I missed something.. I increase upload file size and also increase buffer size but all time response same. 所有其他AJAX请求(登录,注册,basicInformation,educationDetail等)均已成功完成,但是当我上传个人资料图片(base64)并发送到laravel控制器时,nginx服务器无法正常工作并返回错误...我不知道在哪里我错过了一些东西。我增加了上传文件的大小,也增加了缓冲区的大小,但是所有时间响应都相同。 Please help me ...
请帮我 ...
Cropped Image function in .js .js中的裁剪图像功能
jQuery('.cropped_image').on('click', function (ev) {
$image_crop.croppie('result', {
type: 'canvas',
size: 'viewport'
}).then(function (response) {
if(response != "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6CAYAAACI7Fo9AAAGBElEQVR4Xu3TAQEAAAjCMO1f2h5+NmDIjiNA4L3Avk8oIAECY+iegEBAwNADJYtIwND9AIGAgKEHShaRgKH7AQIBAUMPlCwiAUP3AwQCAoYeKFlEAobuBwgEBAw9ULKIBAzdDxAICBh6oGQRCRi6HyAQEDD0QMkiEjB0P0AgIGDogZJFJGDofoBAQMDQAyWLSMDQ/QCBgIChB0oWkYCh+wECAQFDD5QsIgFD9wMEAgKGHihZRAKG7gcIBAQMPVCyiAQM3Q8QCAgYeqBkEQkYuh8gEBAw9EDJIhIwdD9AICBg6IGSRSRg6H6AQEDA0AMli0jA0P0AgYCAoQdKFpGAofsBAgEBQw+ULCIBQ/cDBAIChh4oWUQChu4HCAQEDD1QsogEDN0PEAgIGHqgZBEJGLofIBAQMPRAySISMHQ/QCAgYOiBkkUkYOh+gEBAwNADJYtIwND9AIGAgKEHShaRgKH7AQIBAUMPlCwiAUP3AwQCAoYeKFlEAobuBwgEBAw9ULKIBAzdDxAICBh6oGQRCRi6HyAQEDD0QMkiEjB0P0AgIGDogZJFJGDofoBAQMDQAyWLSMDQ/QCBgIChB0oWkYCh+wECAQFDD5QsIgFD9wMEAgKGHihZRAKG7gcIBAQMPVCyiAQM3Q8QCAgYeqBkEQkYuh8gEBAw9EDJIhIwdD9AICBg6IGSRSRg6H6AQEDA0AMli0jA0P0AgYCAoQdKFpGAofsBAgEBQw+ULCIBQ/cDBAIChh4oWUQChu4HCAQEDD1QsogEDN0PEAgIGHqgZBEJGLofIBAQMPRAySISMHQ/QCAgYOiBkkUkYOh+gEBAwNADJYtIwND9AIGAgKEHShaRgKH7AQIBAUMPlCwiAUP3AwQCAoYeKFlEAobuBwgEBAw9ULKIBAzdDxAICBh6oGQRCRi6HyAQEDD0QMkiEjB0P0AgIGDogZJFJGDofoBAQMDQAyWLSMDQ/QCBgIChB0oWkYCh+wECAQFDD5QsIgFD9wMEAgKGHihZRAKG7gcIBAQMPVCyiAQM3Q8QCAgYeqBkEQkYuh8gEBAw9EDJIhIwdD9AICBg6IGSRSRg6H6AQEDA0AMli0jA0P0AgYCAoQdKFpGAofsBAgEBQw+ULCIBQ/cDBAIChh4oWUQChu4HCAQEDD1QsogEDN0PEAgIGHqgZBEJGLofIBAQMPRAySISMHQ/QCAgYOiBkkUkYOh+gEBAwNADJYtIwND9AIGAgKEHShaRgKH7AQIBAUMPlCwiAUP3AwQCAoYeKFlEAobuBwgEBAw9ULKIBAzdDxAICBh6oGQRCRi6HyAQEDD0QMkiEjB0P0AgIGDogZJFJGDofoBAQMDQAyWLSMDQ/QCBgIChB0oWkYCh+wECAQFDD5QsIgFD9wMEAgKGHihZRAKG7gcIBAQMPVCyiAQM3Q8QCAgYeqBkEQkYuh8gEBAw9EDJIhIwdD9AICBg6IGSRSRg6H6AQEDA0AMli0jA0P0AgYCAoQdKFpGAofsBAgEBQw+ULCIBQ/cDBAIChh4oWUQChu4HCAQEDD1QsogEDN0PEAgIGHqgZBEJGLofIBAQMPRAySISMHQ/QCAgYOiBkkUkYOh+gEBAwNADJYtIwND9AIGAgKEHShaRgKH7AQIBAUMPlCwiAUP3AwQCAoYeKFlEAobuBwgEBAw9ULKIBAzdDxAICBh6oGQRCRi6HyAQEDD0QMkiEjB0P0AgIGDogZJFJGDofoBAQMDQAyWLSMDQ/QCBgIChB0oWkYCh+wECAQFDD5QsIgFD9wMEAgKGHihZRAKG7gcIBAQMPVCyiAQM3Q8QCAgYeqBkEQkYuh8gEBAw9EDJIhIwdD9AICBg6IGSRSRg6H6AQEDA0AMli0jA0P0AgYCAoQdKFpGAofsBAgEBQw+ULCIBQ/cDBAIChh4oWUQChu4HCAQEDD1QsogEDN0PEAgIGHqgZBEJGLofIBAQMPRAySISMHQ/QCAgYOiBkkUkYOh+gEBAwNADJYtIwND9AIGAgKEHShaRgKH7AQIBAUMPlCwiAUP3AwQCAoYeKFlEAgcm/gD7Dx6GVAAAAABJRU5ErkJggg=="){
html = '<img id="croped-image-source" src="' + response + '" />';
jQuery("#cropped-image-preview-section").html(html);
profilePictureTemp = response;
isPicSet = true;
let data = new FormData();
data.append('profile_picture',response);
jQuery.ajax({
method: "POST",
url: "/imag-store",
data: data,
cache: false,
contentType: false,
processData: false,
headers: {
'X-CSRF-TOKEN': jQuery('meta[name="csrf-token"]').attr('content')},
beforeSend: function () {
jQuery('#btn_submit').addClass('hidden');
jQuery('#loaderClass').removeClass('hidden');
console.log("Before Sending");
},
success: function (response) {
console.log('success');
console.log(response);
},
error: function (jqXHR, exception) {
var msg = '';
if (jqXHR.status === 0) {
msg = 'Not connect.\n Verify Network.';
} else if (jqXHR.status == 404) {
msg = 'Requested page not found. [404]';
} else if (jqXHR.status == 500) {
msg = 'Internal Server Error [500].';
} else if (exception === 'parsererror') {
msg = 'Requested JSON parse failed.';
} else if (exception === 'timeout') {
msg = 'Time out error.';
} else if (exception === 'abort') {
msg = 'Ajax request aborted.';
} else {
msg = 'Uncaught Error.\n' + jqXHR.responseText;
}
jQuery('#btn_submit').removeClass('hidden');
jQuery('#loaderClass').addClass('hidden');
console.log(msg);
}
});
}
});
});
web.php web.php
Route::post('/imag-store','ExpertInfoController@storeProfilePicture');
ExpertInfoController.php ExpertInfoController.php
public function storeProfilePicture(Request $request){
$data = $request->get('experts_profile_picture');
if(substr($data, 11, strpos($data, ';')-11) == "png"){
$data = str_replace('data:image/png;base64,', '', $data);
$data = str_replace(' ', '+', $data);
$filename = 'experts_img'
.rand()
.'_'.time()
.".png";
$year = date("Y");
$month = date("m");
$path = PUBLIC_PATH_TO_STORE_IMAGE.'/images/experts/'.$year.'/'.$month.'';
echo "Now entering create";
echo ($path);
$file = self::makeDirectory($path,0777,true,true);
$file_path = $path.'/'.$filename;
file_put_contents($file_path,base64_decode($data));
$pic = str_replace(PUBLIC_PATH_TO_STORE_IMAGE,'',$file_path);
}
else{
$pic = $request->get('experts_profile_picture');
}
$info = new ExpertInfo;
$info->experts_profile_picture = $pic;
$info->save();
}
helloexperts.conf helloexperts.conf
server {
client_max_body_size 20m;
listen 80;
server_name helloexperts.dev;
root /var/www/vhosts/helloexperts.com/httpdocs/html/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
location / {
try_files $uri $uri/ /index.php$is_args$args;
#try_files $uri $uri/ /index.php?$query_string;
root /var/www/vhosts/helloexperts.com/httpdocs/html/public;
}
index index.php index.html index.htm;
charset utf-8;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
# #add_header 'Access-Control-Allow-Origin' '*';
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
location ~ \.php$ {
root /var/www/vhosts/helloexperts.com/httpdocs/html/public;
try_files $uri =404;
fastcgi_param REMOTE_ADDR $http_x_real_ip;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
#client_header_buffer_size 64k;
#large_client_header_buffers 4 64k;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 16k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_param PHP_VALUE "upload_max_filesize = 20M \n post_max_size = 20M";
add_header 'Access-Control-Allow-Origin' '*';
include fastcgi_params;
# add_header 'Access-Control-Allow-Origin' '*';
}
location ~ /\.(?!well-known).* {
deny all;
}
Can you confirm the route by doing 你能通过做确认路线吗
php artisan route::list
PHP的工匠路线::列表
. 。 if the route does not exist try these commands .
如果路由不存在,请尝试以下命令。
php artisan cache:clear
php artisan route:cache
hope it helps. 希望能帮助到你。 cheers!
干杯!
Update i see the issue is in your code.you can use the following code to get the image from input . 更新,我看到问题出在您的代码中。您可以使用以下代码从输入获取图像。 (i assume thats what you are trying to do)
(我假设这就是您想要做的)
$base64img = $request->input('image');
if($base64img){
// get the base-64 from data
$file = substr($base64img, strpos($base64img ,",")+1);
// decode base64 string
$image = base64_decode($file);
$pos = strpos($base64img, ';');
$imageType = explode('/', substr($base64img, 0, $pos))[1];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.