Что происходит между загрузкой файла в форму HTML и его отправкой?
Что происходит с файлом после его загрузки в форму HTML, но до его отправки?
Я загрузил свое резюме на этот сайт https://studyhut.com/employment/ а затем щелкнул красный крестик, чтобы удалить его, но я хочу убедиться, что оно действительно было удалено.
Осматривая элемент, который является кнопкой Выбрать файлы, я вижу, что его HTML
input id="gform_browse_button_5_6" value="Select files" class="button gform_button_select_files" aria-describedby="extensions_message" tabindex="9" style="position: relative; z-index: 1;" type="button">
Основываясь на моих знаниях JavaScript, я должен взглянуть на код, который управляет идентификатором gform_browse_button_5_6 или кнопкой класса gform_button_select_files (какой?), Однако в исходном коде есть сценарии gajillion.
- Как использовать инспектор в Firefox, чтобы точно определить, где находится идентификатор или класс, или 2. Вообще говоря, безопасно ли мое резюме между его загрузкой и отправкой формы? Ранее я читал, что после отправки файлы хранятся во временной папке на сервере, которая затем может быть обработана PHP, но что происходит в тот момент, когда я выбрал файл для загрузки, и он показывает имя файла с возможностью удаления это (вероятно, обновил страницу с AJAX)?
ОБНОВЛЕНИЕ: Я нашел одно место, где класс gform_button_select_files обрабатывается в https://studyhut.com/wp-content/plugins/gravityforms/js/gravityforms.min.js?ver=2.0.7 и код
b(document).ready(function(){"undefined"!=typeof adminpage&&"toplevel_page_gf_edit_forms"===adminpage||"undefined"==typeof plupload?b(".gform_button_select_files").prop("disabled",!0):"undefined"!=typeof adminpage&&adminpage.indexOf("_page_gf_entries")>-1&&b(".gform_fileupload_multifile").each(function(){c(this)})}),a.setup=function(a){c(a)}}(window.gfMultiFileUploader=window.gfMultiFileUploader||{},jQuery);var __gf_keyup_timeout;jQuery(document).on("change keyup",".gfield_trigger_change input, .gfield_trigger_change select, .gfield_trigger_change textarea",function(a){gf_raw_input_change(a,this)}),!window.rgars,!window.rgar,String.prototype.format=function(){var a=arguments;return this.replace(/{(\d+)}/g,function(b,c){return"undefined"!=typeof a[c]?a[c]:b})};
Означает ли это что-нибудь для кого-то или это значит быть нечитаемым человеком?
Обновление II Похоже, с определен внутри другой функции
)}};!function(a,b){function c(c){function g(a,c){b("#"+a).prepend("<li>"+c+"</li>")}
Гравитационные формы JS SRC
https://studyhut.com/wp-content/plugins/gravityforms/js/jquery.json.js?ver=2.0.7
/ *! [CDATA [ / var gform_gravityforms = {"strings": {"invalid_file_extension":"Этот тип файла недопустим. Должен быть одним из следующих: ","delete_file":"Удалить этот файл","in_progress":" в процессе ","file_exceeds_limit":" Размер файла превышает ограничение размера "," invalid_extension ":" Этот тип файла недопустим.","max_reached":" Максимальное количество достигнутых файлов ","unknown_error":" При сохранении файла на сервере возникла проблема "," now_uploading ":" Пожалуйста, дождитесь завершения загрузки ","cancel ":"Cancel ","cancel_upload":"Cancel this upload "," отменено ":" Отменено "}," вары ": {" images_url ":" https://studyhut.com/wp-content/plugins/gravityforms/images "}}; / ]]> * /
https://studyhut.com/wp-content/plugins/gravityforms/js/gravityforms.min.js?ver=2.0.7
- https://studyhut.com/wp-content/plugins/gravityforms/js/conditional_logic.min.js?ver=2.0.7
- https://studyhut.com/wp-includes/js/plupload/plupload.full.min.js?ver=2.1.8
- https://studyhut.com/wp-content/plugins/gravityforms/js/jquery.maskedinput.min.js?ver=2.0.7
Наконец, это HTML-код для нажатия на кнопку удаления
img class="gform_delete" src="https://studyhut.com/wp-content/plugins/gravityforms/images/delete.png" onclick="gformDeleteUploadedFile(5,6, this);" onkeypress="gformDeleteUploadedFile(5,6, this);" alt="Delete this file" title="Delete this file">
а вот функция gformDeleteUploadedFile
function gformDeleteUploadedFile(a,b,c){var d=jQuery("#field_"+a+"_"+b),e=jQuery(c).parent().index();d.find(".ginput_preview").eq(e).remove(),d.find('input[type="file"]').removeClass("gform_hidden"),d.find(".ginput_post_image_file").show(),d.find('input[type="text"]').val("");var f=jQuery("#gform_uploaded_files_"+a).val();if(f){var g=jQuery.secureEvalJSON(f);if(g){var h="input_"+b,i=d.find("#gform_multifile_upload_"+a+"_"+b);if(i.length>0){g[h].splice(e,1);var j=i.data("settings"),k=j.gf_vars.max_files;jQuery("#"+j.gf_vars.message_id).html(""),g[h].length<k&&gfMultiFileUploader.toggleDisabled(j,!1)}else g[h]=null;jQuery("#gform_uploaded_files_"+a).val(jQuery.toJSON(g))}}}
2 ответа
Из того, что я вижу, ваше резюме небезопасно, оно отправляется на сервер при загрузке через ajax-пост. Вы можете увидеть это на вкладке сети вашего инспектора при нажатии кнопки загрузки. Как только он идет на сервер, вы ничего не можете сделать, чтобы увидеть, что они делают с этим файлом.
Одна вещь, хотя, это сайт, построенный на WordPress с использованием гравитационных форм для загрузки, вы можете изучить это подробнее и то, что он ожидает от вас на бэк-энде (обычные практики), если вы заинтересованы, но все еще нет уверенности что они делают на заднем плане
Обновить:
После еще одного взгляда на это, я думаю, что сервер не удаляет загруженный вами файл. Снова, проверив вкладку сети при загрузке, вы увидите, что ajax-запрос отправляется на сервер через POST, теперь, когда вы нажимаете "Удалить", на сервер не поступает никаких запросов, а изменения вносятся только в интерфейс, который вы ожидаете. DELETE запрос, чтобы пройти, но это не так. Таким образом, сервер хранит вашу загрузку, но нет никакого способа узнать, что они с ней делают. Может случиться так, что они удалят его, если через какое-то время не будут связаны с чем-либо или просто сохранят его навсегда.
Первый ajax-запрос выглядит инициированным через плагин https://studyhut.com/wp-includes/js/plupload/plupload.full.min.js?ver=2.1.8
Что происходит с файлом после его загрузки в форму HTML, но до его отправки?
но то, что происходит в то время, когда я выбрал файл для загрузки, и он показывает имя файла с возможностью удалить его
Обратите внимание, что теперь можно установить .files
свойство <input type="file">
элемент к FileList
объект, имеющий .length
0
и не содержит File
объекты, см. Make.files settable # 2866.
<input type="file" />
<input type="button" value="Delete Files" />
<script>
const input = document.querySelector("input[type=file]");
const button = document.querySelector("input[type=button]");
let files = input.files; // `FileList` object
console.log(files);
// set `.files` of `<input type="file">` to `FileList`
const setFiles = (element, files) => {
if (element.files.length) {
element.files = files; // set `.files` of `<input>` element
console.log(element, element.files);
}
};
input.onchange = () => {
if (input.files.length > 0) {
// do stuff
console.log(input.files);
}
}
button.onclick = () => {
setFiles(input, files);
}
</script>
Не может быть уверен, что код на document
что вы ссылаетесь, выполняет ту же процедуру, не просматривая полный HTML и JavaScript, используемые на document
,