Upload файла через линк с помощью javascript

alexblade

Новичок
есть ява скрипт внизу топика main.js и
есть такая форма:

<form id="js-add-form" action="" class="board__content container_25 cf" method="post" data-confirm-text="Вы уверены, что хотите уйти с этой страницы? Несохраненные данные будут потеряны!">

<a href="" id="fileupload-button">Добавить фотографию</a>
<input id="fileupload-file-input" name="file" accept="image/gif, image/jpeg, image/png" style="position: absolute; top: -10000px" multiple="" type="file">
<section class="board__content__photo__body grid_20" style="display: none;" id="filupload-media-container">
</section>
<button class="board__content__further__body"><span>далее</span></button>
----
задача: загрузить фото локально ява скриптом.
манипуляции с input привели только к тому что я вставляю в поле файл но при отправке формы через кнопку "далее" инпут поле не обрабатывается.
в оригинале фото добавляется через линк id="fileupload-button" и сразу же, до отправки формы, аплоадится на сервер.
Увидел только что в main.js реализована обработка клика по линку, методом вызова диалогового окна загрузки файла но не смог разобраться как загрузить локальным яваскриптом фото через эту форму

ссылка на main.js
https://www.evernote.com/shard/s212/sh/933899a9-0823-4322-bd60-240e92fb05ba/ab7e0e6bdc57e7cb9165f34cab8ee10b
 

alexblade

Новичок
форма находиться на публичном сервере. я ее менять (кроме как яваскриптом) не могу.
помогите разобраться как ее (форму) изменить, чтоб когда я в инпут поле вставляю фотку и отправляю форму, то фотка бы грузилась на сервер.

[или возможно не в инпут поле гадо вставлять чтоб скрипт подхватил фотку, но куда я не смог разобраться]
 

alexblade

Новичок
пробовал яваскриптом засунуть файл в инпут поле (удачно) но когда сабмичу форму через кнопку "далее" фотка не аплоадится. т.е. надо через методы из main.js както залить (вижу там метод o.prototype._upload) но не хватает сноровки разобраться с кодом

пробовал
options.prototype._upload('file:///C:/1.gif')
но вылазит ReferenceError: options is not defined

пробовал
document.getElementById("fileupload-file-input").prototype._upload('file:///C:/1.gif')
TypeError: document.getElementById(...).prototype is undefined
 

WMix

герр M:)ller
Партнер клуба
попробуй подумать!
представь, что выходишь ты так на сайтик, а он у тебя явойскриптом файлики аплодит. удобно же?
 

alexblade

Новичок
в оригинале там file upload dialog стандартное окно, которое потом "форыч" все выделенные файлы и аплоадит их. но мне надо в обход этого диалогового окна. просто через консоль браузера отправил команду и фотка залилась... вот не могу осилить как
document.getElementById("fileupload-file-input").
передать событыие аплоада
кажется что это ._upload('file:///C:/1.gif')
 

alexblade

Новичок
я добавил файл в инпут поле, потом запустил это
$('#fileupload-file-input').bind('change', function (e) {
$('#fileupload').fileupload('add', {
fileInput: $(this)
});
});

таким способом не добавило :(

вижу что в этом направлении надо копать но это выше моего понимания %(
 

WMix

герр M:)ller
Партнер клуба
вот мне с диалогом все понятно, а вот без диалога это звучит так
что выходишь ты так на сайтик, а он у тебя явойскриптом файлики аплодит.
 

alexblade

Новичок
ну вот мне как раз надо в обход диалога и кроме как яваскриптом (прототайп) я не знаю чем еще это можно сделать
 

AnrDaemon

Продвинутый новичок
Дурак.
Тебе только что привели пример.
Представь себе, что ТЫ заходишь так на какой-то сайт, а сайт РРАЗ - и не спрося тебя половину порнухи с твоего компа себе скачал.
 

alexblade

Новичок
каким образом ?


я запускаю свой код, с известными только мне файлами, невижу в этом преград. или вы хотите сказать что в обход диалогового окна это нельзя реализовать ?
 

AnrDaemon

Продвинутый новичок
Ещё раз - если ты можешь запустить такой код у себя - значит, кто угодно может запустить такой код на чьём угодно компе.
Когда уже ты начнёшь думать дальше собственного носа?…
 

WMix

герр M:)ller
Партнер клуба
@alexblade, я знаю как называется файл на твоем компе где хранятся пароли браузера
 

alexblade

Новичок
@WMix
ну это и я знаю :)..... ок я понял вас

а как же тогда на селениум я без проблем аплоажу файл в обход диалогового окна
browser.file_field:)id, "fileupload-file-input").set '//1.jpg'

еслиб не грабли в данной проблемной форме я бы так и сделал. но тут яваскрипт мешает это сделать. вернее он(скрипт) это совсем по другому реализует.
вот и прошу помочь как сообразить чтоб мой яваскрипт аплоадил картинку с этого инпут поля
 

alexblade

Новичок
возможно я не так выражаюсь..... проблема не в том чтоб скрипт сам выберал за меня файл (понятно это просто вход всем пакостям через широко открытыю парадную дверь). файл я выберу селениумом. задача в том чтоб моим скриптом, ранее выбранный файл заоплоадит на сервер
 

WMix

герр M:)ller
Партнер клуба
The value property of input:file is read-only for security reasons.
 

alexblade

Новичок
@WMix
да это понятно. яж говорю селениумом я вставлю файл. проблема не в этом. обычная форма его бы скушала. проблема в данной конкретной форме.
аплоад картинки производится не через сабмит формы а отдельным "потоком" скриптами еще до отправки формы.

как конкретно в данном случае, загрузить\вызвать евент либо существующими функциями либо какойто своей ?
 

alexblade

Новичок
на странице евент
return function(e) {
return e.preventDefault(), t.openFileUploadDialog()
}
вот как проскочить это диалоговое окно (файл я выберу силениумом), но при этом чтоб яваскрипт функции подхватили инпут файл и провели его аплоад ?
 

WMix

герр M:)ller
Партнер клуба
всегда можно так подойти
PHP:
 !isTest() ? t.openFileUploadDialog() : false
а как красиво, понять бы полностью твой тест.
 

alexblade

Новичок
@WMix, вы смотрели main.js ?
если я после вставки файла в инпут поле
запущу скрипт
browser.execute_script( "!isTest() ? t.openFileUploadDialog() : false ")
мне выдаст ошибку
ReferenceError: isTest is not defined

после вставки файла
мне надо запустить такой скрипт который инициализирует метод загрузки этого файла на сервер (сервер, и генерируемый post запрос, все это есть в файле main.js из шапки)
 

WMix

герр M:)ller
Партнер клуба
конечно же не смотрел, а isTest() конечно же надо написать.
 
Сверху