Я работаю с prestashop и позволяю пользователям загружать свои собственные файлы при добавлении продукта в корзину.PrestaShop: Сохраняйте имя и расширение файлов при загрузке настроек продукта (или, по крайней мере, расширения)
Я включил его на бэкэнд и на переднем конце, я следил за this tutorial, чтобы настроить его.
Вот блок кода, который обрабатывает вызовы ajax и загрузку файлов. Я бы хотел, чтобы оно сохраняло исходное имя и расширение файла, который пользователь дал ему, когда он загружается.
Возможно ли это?
var files = new Array();
$('.customizationUploadLine').find('input[type="file"]').on('change', prepareUpload);
// Grab the files and set them to our variable
function prepareUpload(event)
{
files.push({'name' : event.target.name, 'file' :event.target.files[0]});
}
function previewFile(target, file) {
$('#uniform-'+target.attr('id')).before($('<img id="preview-'+target.attr('id')+'"/>'));
var preview = $('#preview-'+target.attr('id'));
var reader = new FileReader();
preview.attr('width', 64);
reader.onloadend = function() {
preview.attr('src', reader.result);
}
if (file) {
reader.readAsDataURL(file);
} else {
preview.attr('src', "");
}
}
$('#uploadTrigger').click(function(e) {
if(files.length > 0)
{
$('<div class="myoverlay"></div>').css({
'position' : 'fixed',
'top' : 0,
'left' : 0,
'background' : 'black',
'background' : 'rgba(0,0,0,.5)',
'z-index' : 5999,
'width' : '100%',
'height' : '100%',
'cursor' : 'pointer'
}).appendTo('body');
$('<div class="uploadingfiles">Your files are being uploaded...<img src="'+baseUri+'themes/default-bootstrap/img/ajax-loader.gif"></div>')
.css({
'position' : 'absolute',
'top' : '30%',
'left' : '50%',
'width' : '300px',
'margin-left' : '-150px',
'text-align' : 'center',
'padding' : '10px',
'background' : 'white'
})
.appendTo('.myoverlay');
var data = new FormData();
$.each(files, function(key, obj)
{
data.append(obj.name, obj.file);
});
data.append('submitCustomizedDatas', 1);
data.append('ajax', 1);
$.ajax({
url: $('#customizationForm').attr('action'),
type: 'POST',
data: data,
cache: false,
dataType: 'json',
processData: false,
contentType: false,
success: function(data, textStatus, jqXHR)
{
if(typeof data.errors === 'undefined')
{
$.each(files, function(key, obj)
{
$('input[name="'+obj.name+'"]').addClass('filled');
previewFile($('input[name="'+obj.name+'"]'), obj.file);
});
$('.uploadingfiles').text('Upload Complete!');
}
else
{
$('.uploadingfiles').text('Error while uploading, please refresh the page and try again');
}
$('.myoverlay').click(function(){$(this).remove()});
},
error: function(jqXHR, textStatus, errorThrown)
{
$('.uploadingfiles').text('ERRORS: ' + errorThrown);
$('.myoverlay').click(function(){$(this).remove()});
}
});
} // end checking files length
else alert('Nothing to upload!');
});
В настоящее время файловых добавлений в каталог загрузок (отлично!), Но он имеет очень напуганное имя без расширения, привязанного к нему. Я хотел бы, чтобы изображение сохраняло имя и расширение, чтобы я мог передать эту информацию на экран проверки и отобразить их загруженное изображение.
Спасибо! Вопрос: почему вы не рекомендовали бы это делать? Существует ли риск для безопасности? – Hanny
Риск безопасности Я не думаю, но была удаленная (но не слишком) возможность того, что два клиента будут загружать файл с тем же именем, например. «1.jpg», остальное следует;) – sarcom
Ах! Хорошая точка зрения. Возможно, я добавлю к нему дату/время, чтобы это не произошло. Спасибо за помощь! – Hanny