2014-02-19 2 views
0

Я занимаюсь этим довольно долгое время, но не нашел хорошего ответа.JSP идентифицирует дубликат загрузки файла

У меня есть четыре поля, которые принимают файлы от пользователя,

<form method="post" action="upload" target="_blank" enctype="multipart/form-data" style="position: absolute; right: 0%; top: 2%;"> 
Left File : <input type="file" name="dataFile" id="fileChooser" /><br><br> 
Right File : <input type="file" name="dataFile" id="fileChooser" /><br><br> 
Config File :<input type="file" name="dataFile" id="fileChooser" /><br><br> 
my File : <input type="file" name="dataFile" id="fileChooser" /><br><br> 
upload<input type="submit" value="Upload" multiple="multiple" /> 
</form> 

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

это может быть на стороне JSP или на стороне jvv. Использование общей загрузки файлов. Я нашел в своем поиске here, что мне нужно использовать DigestOutputStream, но нет, где я мог бы найти, как его использовать, и бесполезно.

--------------------------------------------- EDIT --------------------------------------

Основываясь на ответах ниже, ve обновил мой код следующим образом:

<form method="post" name="myform" action="upload" target="_blank" enctype="multipart/form-data" style="position: absolute; right: 0%; top: 2%;"> 
Left File : <input type="file" name="dataFile1" id="fileChooser1" /><br><br> 
Right File : <input type="file" name="dataFile2" id="fileChooser2" /><br><br> 
Config File :<input type="file" name="dataFile3" id="fileChooser3" /><br><br> 
Geco File : <input type="file" name="dataFile4" id="fileChooser4" /><br><br> 
</form> 
<button type="button" onclick="ValidateFile()" style="position: absolute; right: 8%; top: 20%;">Click to Upload</button> 
<script type='text/javascript'> 
function ValidateFile() 
{ 
var FileName1 = document.getElementById("fileChooser1"); 
var FileName2 = document.getElementById("fileChooser2"); 
var FileName3 = document.getElementById("fileChooser3"); 
var FileName4 = document.getElementById("fileChooser4"); 

if(FileName1 == FileName2) 
    { 
     alert("Same file cannot be uploaded!"); 
    } 

     document.myform.submit(); // This works fine, but the alert doesn't. Tried .value and .value() also still doesn't work.  
} 
</script> 

По-прежнему код не работает, какова моя ошибка?

+0

Попробуйте следующее: var FileName1 = document.getElementById ("fielChooser1"). Value; var FileName2 = document.getElementById ("fielChooser2"). Value; var FileName3 = document.getElementById ("fielChooser3"). Value; var FileName4 = document.getElementById ("fielChooser4"). Value; –

+0

Эй, это то же самое, что я сделал выше ryt? –

+0

Нет, вы используете .value(), а не .value..they совершенно разные вещи. –

ответ

0

Попробуйте свойство значения, как это:

var file1= document.getElementById("FileUpload1"); 
var file2= document.getElementById("FileUpload2"); 

if(file1.value == file2.value){ 
alert("Duplicate "); 

} 

вы формируете необходимо выполнить следующие действия, чтобы переопределить поведение кнопки отправки:

<form method="post" onsubmit="return doSomething()"> 
    <input type="file" name="file1"> 
    <input type=submit> 
</form> 

в вы делаете следующее:

function doSomething(){ 
// if you dont want to sumbit return false ; 
return false; 

//if you want to submit return true 
return true; 
} 

и plese дайте мне немного feedb ack

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

+0

Это отлично работает! Но можете ли вы предложить мне, как вставить это в свой тег ввода? Я использовал onclick во входном теге, хотя он показывает предупреждение, которое он все еще вызывает сервлет, что делать, чтобы остановить вызов сервлета, если файлы одинаковы? –

+0

Не работает, все еще. –

+0

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

0
Left File : <input type="file" name="dataFile1" id="fileChooser1" /><br><br> 
Right File : <input type="file" name="dataFile2" id="fileChooser2" /><br><br> 
Config File :<input type="file" name="dataFile3" id="fileChooser3" /><br><br> 
my File : <input type="file" name="dataFile4" id="fileChooser4" /><br><br> 

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

function validateFiles(){ 
    var fileName1=document.getElementById("fileChooser1").value; 
    var fileName2=document.getElementById("fileChooser2").value; 
    ............ 

    if(fileName1 == fileName2 ...){ 
    return false; 
    } 

    //Here goes Code to Submit form 

} 
+0

Это отлично работает!Но можете ли вы предложить мне, как вставить это в свой тег ввода? Я использовал onclick во входном теге, хотя он показывает предупреждение, которое он по-прежнему вызывает сервлет, что делать, чтобы остановить вызов сервлета, если файлы одинаковы? –

+0

Pls ссылается на обновленное сообщение. –

+0

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

0

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

Если вы хотите проверить, двуличие по содержанию здесь краткие шаги, которые вы можете сделать:

1) Write the contents of the files to temperory files/permenant ones if you are anyway  
    going to store them. 
2) While constructing the outputstream for writing the file,instead of creating normal 
    FileoutourStream create DigestOutputStream and pass the FileOutputStream to 
    DigestOutputStream's constructor. 
3) DigestOutputStream's constructor takes another parameter called MessageDigest.You can 
    instantiate this seperately :MessageDigest md = MessageDigest.getInstance("MD5"); 
    and pass on this instance to constructor in step 2. 
4) after you call write on the output stream and done with the write calls, 
    Call one of the digest methods on the MessageDigest instance as follows: 
    mdos.getMessageDigest().digest(). 
6) store the string representation of byte array returned by digest by using technique 
    as suggested in following link : 

Get MD5 String from Message Digest

Надеется, что это помогает. pleaase дайте мне знать, если вам нужны разъяснения

+0

+1 Большое спасибо! –

+0

Добро пожаловать. Можете ли вы также принять ответ, если он работает? Спасибо n advance :) –

+0

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

Смежные вопросы