我有一个ajax调用,它将文件上传到部署在Heroku的Laravel应用中。在我的本地环境中,这无瑕。
在Heroku上它将上传文件(我尝试在ajax响应中返回$ logoImage,并且那里有一个tmp / whatever123),但是当它应该移动时,什么也没有发生。没有文件放在/ public / img / local_logos文件夹中。还尝试仅使用“ img / local_logos /”作为路径,也可以在本地使用。
这可能是https问题。我在Heroku上使用https。但是,当尝试上传文件时,它应该已经爆炸了。发送具有相似代码的普通格式在生产中也没有问题。
这是ajax调用所调用的函数。
public function postLocalLogo(Request $request)
{
if ($request->hasFile('logoImage')) {
$logoImage = $request->file('logoImage');
$path = base_path() . '/public/img/local_logos/';
$extension = $logoImage->getClientOriginalExtension();
$fileName = md5($logoImage->getClientOriginalName() . microtime()) . '.' . strtolower($extension);
$logoImage->move($path, $fileName); // This seems to not happen on Heroku
$storageLogo = new StorageLogo();
$storageLogo->filename = $fileName;
$storageLogo->save();
echo json_encode($fileName);
}
}
这是ajax函数:
function uploadLogo() {
deleteLogoFromServer();
var logoFile = $('#logoImage')[0].files[0];
var data = new FormData();
data.append('logoImage', logoFile);
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
}
});
jQuery.ajax({
url: '/postajax',
data: data,
cache: false,
contentType: false,
processData: false,
method: 'POST',
success: function (data) {
localStorage.setItem('logoFileName', data);
$("#js-dataLocalLogo").val(localStorage.getItem('logoFileName'));
},
error: function (error) {
alert(error);
}
});
}