Как очистить файл, если размер изображения больше, чем я хочу? [Дубликат]

Вы можете попробовать использовать что-то вроде HTML Tidy , чтобы очистить любой «сломанный» HTML и преобразовать HTML в XHTML, который затем можно разобрать с помощью парсера XML.

94
задан thomaux 4 January 2016 в 14:22
поделиться

11 ответов

Как удалить этот узел, создав новый с тем же именем?

16
ответ дан DFectuoso 27 August 2018 в 15:04
поделиться

Установка значения '' не работает во всех браузерах.

Вместо этого попробуйте установить значение на null следующим образом:

document.getElementById('your_input_id').value= null;

EDIT: я получаю очень обоснованные причины безопасности, которые не позволяют JS устанавливать входной файл, однако представляется разумным предоставить простой механизм для очистки уже выбора вывода. Я попытался использовать пустую строку, но она не работала во всех браузерах, NULL работал во всех браузерах, которые я пробовал (Opera, Chrome, FF, IE11 + и Safari).

EDIT: Обратите внимание, что настройка NULL работает во всех браузерах при установке на пустую строку.

21
ответ дан BigMac66 27 August 2018 в 15:04
поделиться

Как насчет:

input.type = "text";
input.type = "file";

Мне все еще нужно понять, почему это не работает с webkit.

В любом случае, это работает с IE9>, Firefox и Opera. Ситуация с webkit заключается в том, что я, похоже, не могу изменить ее обратно в файл. В IE8 ситуация заключается в том, что она выдает исключение безопасности.

Изменить: для webkit, Opera и firefox это работает, хотя:

input.value = '';

(проверьте выше ответ с этим предложением)

Я посмотрю если я могу найти более чистый способ сделать этот кросс-браузер без необходимости использования GC.

Edit2:

try{
    inputs[i].value = '';
    if(inputs[i].value){
        inputs[i].type = "text";
        inputs[i].type = "file";
    }
}catch(e){}

Работает с большинством браузеров. Не работает с IE & lt; 9, вот и все. Протестировано на firefox 20, chrome 24, opera 12, IE7, IE8, IE9 и IE10.

47
ответ дан brunoais 27 August 2018 в 15:04
поделиться

Я искал простой и чистый способ очистки ввода HTML-файла, эти ответы являются замечательными, но ни один из них не отвечает на то, что я ищу, пока я не столкнулся в Интернете с простым элегантным способом сделайте это:

var $input = $("#control");

$input.replaceWith($input.val('').clone(true));

все кредиты идут на Chris Coyier .

// Referneces
var control = $("#control"),
    clearBn = $("#clear");

// Setup the clear functionality
clearBn.on("click", function(){
    control.replaceWith( control.val('').clone( true ) );
});

// Some bound handlers to preserve when cloning
control.on({
    change: function(){ console.log( "Changed" ) },
     focus: function(){ console.log(  "Focus"  ) }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="file" id="control">
<br><br>
<a href="#" id="clear">Clear</a>

1
ответ дан chebaby 27 August 2018 в 15:04
поделиться

РЕШЕНИЕ

Следующий код работал для меня с jQuery. Он работает в каждом браузере и позволяет сохранять события и настраиваемые свойства.

var $el = $('#your-input-id');
$el.wrap('<form>').closest('form').get(0).reset();
$el.unwrap();

DEMO

См. этот jsFiddle для кода и демонстрации.

ССЫЛКИ

11
ответ дан Community 27 August 2018 в 15:04
поделиться

Существует 3 способа очистки ввода файла с помощью javascript:

  1. значение set value для пустого или нулевого. Работает для IE11 + и других современных браузеров.
  2. Создайте новый элемент ввода файла и замените старый. Недостатком является то, что вы потеряете прослушиватели событий и свойства expando.
  3. Сбросьте форму владельца через метод form.reset (). Чтобы избежать влияния на другие элементы ввода в одной и той же форме владельца, мы можем создать новую пустую форму и добавить элемент ввода файла в эту новую форму и сбросить ее. Этот способ работает для всех браузеров.

Я написал функцию javascript. demo: http://jsbin.com/muhipoye/1/

function clearInputFile(f){
    if(f.value){
        try{
            f.value = ''; //for IE11, latest Chrome/Firefox/Opera...
        }catch(err){ }
        if(f.value){ //for IE5 ~ IE10
            var form = document.createElement('form'),
                parentNode = f.parentNode, ref = f.nextSibling;
            form.appendChild(f);
            form.reset();
            parentNode.insertBefore(f,ref);
        }
    }
}
130
ответ дан cuixiping 27 August 2018 в 15:04
поделиться

Что мне помогло, я попытался извлечь и загрузить последний выбранный файл, используя цикл, вместо того, чтобы очищать очередь, и это сработало. Вот код.

for (int i = 0; i <= Request.Files.Count-1; i++)
{
 HttpPostedFileBase uploadfile = files[i];
 Stream fs = uploadfile.InputStream;
 BinaryReader br = new BinaryReader(fs);
 Byte[] imageBytes = br.ReadBytes((Int32)fs.Length);
}

Надеюсь, это может помочь некоторым.

0
ответ дан dotRag 27 August 2018 в 15:04
поделиться

К сожалению, ни один из вышеперечисленных ответов не охватывает все базы - по крайней мере, не с моим тестированием с помощью javascript с vanilla.

  • .value = null, похоже, работает с FireFox, Chome, Opera и IE11 (но не IE8 / 9/10)
  • .cloneNode.clone() в jQuery) на FireFox, похоже, скопирует .value, поэтому делает клон бессмысленным.

Итак, вот функция javascript vanilla, которую я написал, которая работает на FireFox (27 и 28), Chrome (33), IE (8, 9, 10, 11), Opera (17) ... это которые доступны мне для проверки.

function clearFileInput(ctrl) {
  try {
    ctrl.value = null;
  } catch(ex) { }
  if (ctrl.value) {
    ctrl.parentNode.replaceChild(ctrl.cloneNode(true), ctrl);
  }
}

Параметр ctrl - это сам файл, поэтому функция будет вызываться как ...

clearFileInput(document.getElementById("myFileInput"));
29
ответ дан freefaller 27 August 2018 в 15:04
поделиться

U нужно заменить его новым вводом файла. Вот как это можно сделать с помощью jQuery:

var inputFile = $('input[type=field]');
inputFile.wrap('<div />');

и использовать эту строку, когда вам нужно очистить поле ввода (например, на каком-либо событии):

inputFile.parent().html( inputFile.parent().html() );
12
ответ дан Jamland 27 August 2018 в 15:04
поделиться

Вышеупомянутые ответы предлагают несколько неуклюжие решения по следующим причинам:

  1. Мне не нравится сначала wrap input, а затем получать html, он очень вовлечен и грязный.
  2. Кросс-браузер JS удобен, и кажется, что в этом случае слишком много неизвестных для надежного использования переключения type (что опять-таки немного грязно) и установки value на ''

Итак, я предлагаю вам решение на основе jQuery:

$('#myinput').replaceWith($('#myinput').clone())

Он делает то, что он говорит, он заменяет ввод самим клоном.

Преимущества:

  1. Простой и понятный код
  2. Нет неуклюжей упаковки или переключения типа
  3. Совместимость с браузером (исправьте меня, если я здесь не прав)

Результат: Счастливый программист

2
ответ дан Mosselman 27 August 2018 в 15:04
поделиться
document.getElementById('your_input_id').value=''

Изменить: этот не работает в IE и опера, но, похоже, работает для firefox, safari и chrome.

7
ответ дан Soufiane Hassou 27 August 2018 в 15:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: