私は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
セキュリティ上のリスク私は考えていませんが、2人の顧客が同じ名前のファイルをアップロードするというリモート(ただしあまりにも多い)可能性がありました。 "1.jpg"、残りはつづく) – sarcom
ああ!いい視点ね。おそらく、私はそれに日付/時刻スタンプを追加して、それが発生しないようにします。 ご協力いただきありがとうございます。 – Hanny