[JQUERY] 어떻게 입력 파일 컨트롤에서 하나의 특정 선택한 파일을 제거합니다
JQUERY어떻게 입력 파일 컨트롤에서 하나의 특정 선택한 파일을 제거합니다
해결법
-
1.다른 사람들이 지적한 바와 같이, 파일리스트는 읽기 전용입니다. 당신은 비록 별도의 배열로 해당 파일을 눌러이 주위를 얻을 수 있습니다. 그런 다음 파일의 큐 레이트 목록을 원하는대로 할 수 있습니다. 서버에 업로드하는 것이 목표 인 경우에는을 FileReader API를 사용할 수 있습니다.
다른 사람들이 지적한 바와 같이, 파일리스트는 읽기 전용입니다. 당신은 비록 별도의 배열로 해당 파일을 눌러이 주위를 얻을 수 있습니다. 그런 다음 파일의 큐 레이트 목록을 원하는대로 할 수 있습니다. 서버에 업로드하는 것이 목표 인 경우에는을 FileReader API를 사용할 수 있습니다.
아래는 완전히 파일 목록을 수정할 필요가 피하는 방법에 대한 원형이다. 단계 :
이벤트 핸들러 및 기본 파일 루프 코드 :
var validatedFiles = []; $("#fileToUpload").on("change", function (event) { var files = event.originalEvent.target.files; files.forEach(function (file) { if (file.name.matches(/something.txt/)) { validatedFiles.push(file); // Simplest case } else { /* do something else */ } }); });
다음은 Base64로 덩어리를 인코딩 당신이 선택적으로 브라우저에 파일을로드 할을 FileReader API를 사용하는 방법을 보여줍니다은 서버에 제출하는 파일 루프의 더 복잡한 버전입니다.
files.forEach(function (file) { if (file.name.matches(/something.txt/)) { // You could also do more complicated validation after processing the file client side var reader = new FileReader(); // Setup listener reader.onload = (function (processedFile) { return function (e) { var fileData = { name : processedFile.name, fileData : e.target.result }; // Submit individual file to server $.post("/your/url/here", fileData); // or add to list to submit as group later validatedFiles.push(fileData); }; })(file); // Process file reader.readAsDataURL(file); } else { /* still do something else */ } });
을 FileReader의 API 사용에 대한주의의 참고. 파일을 인코딩 Base64로 약 30 %의 크기를 증가시킬 것이다. 즉 허용되지 않는 경우에 당신은 다른 뭔가를 시도해야합니다.
-
2.나는 잘 여기에 나는 여기에 내 의견을 추가해야한다고 생각 (내가 여기에 대답했습니다 : 파일리스트에서 자바 스크립트를 삭제 파일 업로드 예정)
나는 잘 여기에 나는 여기에 내 의견을 추가해야한다고 생각 (내가 여기에 대답했습니다 : 파일리스트에서 자바 스크립트를 삭제 파일 업로드 예정)
나는 해결 방법을 발견했다. 이것은 모든의 요청에 AJAX를 필요로하지 않습니다 양식이 서버로 전송 될 수 있습니다. 기본적으로 당신은 숨기거나 텍스트 입력을 생성하고 선택한 파일을 처리 한 후 생성 된 base64로 문자열과 그것의 값 속성을 설정할 수 있습니다.
<input type=hidden value=${base64string} />
당신은 아마 여러 입력 파일 대신 입력 텍스트 또는 숨겨진를 만들 아이디어를 고려할 것입니다. 우리가에 값을 할당 할 수 없습니다 이것은 작동하지 않습니다.
이 방법은 데이터베이스에 당신이 할 수 입력 파일을 무시하는 전송되는 데이터의 입력 파일을 포함합니다 :
당신이 파일을 삭제할 때 바로 요소의 인덱스를 얻고 DOM에서 입력 요소 (텍스트 또는 숨김)을 제거합니다.
요구 사항 :
장점 :
-
3.나는 이것이 이전 게시물 알고하지만 난 내 솔루션을 게시합니다 있도록이 일을 해결할하려고 연령을 보냈습니다. 또 다른의 fileList과 FileField와 요소의 파일 목록 업데이트하는 방법이있다 -의 dataTransfer 수행 할 수 있습니다 :
나는 이것이 이전 게시물 알고하지만 난 내 솔루션을 게시합니다 있도록이 일을 해결할하려고 연령을 보냈습니다. 또 다른의 fileList과 FileField와 요소의 파일 목록 업데이트하는 방법이있다 -의 dataTransfer 수행 할 수 있습니다 :
let updateFileList = function (fileField, index) { let fileBuffer = Array.from(fileField.files); fileBuffer.splice(index, 1); /** Code from: https://stackoverflow.com/a/47172409/8145428 */ const dT = new ClipboardEvent('').clipboardData || // Firefox < 62 workaround exploiting https://bugzilla.mozilla.org/show_bug.cgi?id=1422655 new DataTransfer(); // specs compliant (as of March 2018 only Chrome) for (let file of fileBuffer) { dT.items.add(file); } fileField.files = dT.files; }
위의 함수는 DOM 객체로 FileField와 소요되며 FileField와의 파일 목록의 파일의 인덱스 제거 할 따라 전달 및 FileField를 업데이트합니다.
이 다른 사람에게 약간의 시간을 절약 희망!
어떻게 파일리스트 객체에서 설정 파일의 객체 및 길이 속성에 파일도 FormData 객체에 반영됩니다 어디?
-
4.HTML
HTML
<input id="fileInput" name="fileInput" type="file" /> <input onclick="clearFileInput()" type="button" value="Clear" />
자바 스크립트
function clearFileInput(){ var oldInput = document.getElementById("fileInput"); var newInput = document.createElement("input"); newInput.type = "file"; newInput.id = oldInput.id; newInput.name = oldInput.name; newInput.className = oldInput.className; newInput.style.cssText = oldInput.style.cssText; // copy any other relevant attributes oldInput.parentNode.replaceChild(newInput, oldInput); }
from https://stackoverflow.com/questions/19060378/how-to-remove-one-specific-selected-file-from-input-file-control by cc-by-sa and MIT license
'JQUERY' 카테고리의 다른 글
[JQUERY] jQuery를 serializeArray는 클릭 된 버튼을 제출 포함되지 않습니다 (0) | 2020.10.21 |
---|---|
[JQUERY] jQuery를있는 jqGrid에 의해 수행 요청의 콘텐츠 유형을 설정 (0) | 2020.10.21 |
[JQUERY] 클릭 링크 이후로 파일을 저장하려면 브라우저를 강제로 [중복] (0) | 2020.10.21 |
[JQUERY] 변환 -moz-요소를 가져옵니다 : jQuery를에 회전 값 (0) | 2020.10.21 |
[JQUERY] jQuery를 클론 ()조차에로, 이벤트 바인딩을 복제 () (0) | 2020.10.21 |