html
<td width=200>첨부파일</td>
<td width=1000 class="filebox">
<input class="upload-name" value="파일선택" disabled="disabled">
<label for="ex_filename">파일찾기</label>
<input type="file" id="ex_filename" name="file1" class="upload-hidden">
</td>
css
.filebox input[type="file"] {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip:rect(0,0,0,0);
border: 0;
}
.filebox label {
display: inline-block;
padding: .5em .75em;
color: #999;
font-size: inherit;
line-height: normal;
vertical-align: middle;
background-color: #fdfdfd;
cursor: pointer;
border: 1px solid #ebebeb;
border-bottom-color: #e2e2e2;
border-radius: .25em;
}
/* named upload */
.filebox .upload-name {
display: inline-block;
padding: .5em .75em; /* label의 패딩값과 일치 */
font-size: inherit;
font-family: inherit;
line-height: normal;
vertical-align: middle;
background-color: #f5f5f5;
border: 1px solid #ebebeb;
border-bottom-color: #e2e2e2;
border-radius: .25em;
-webkit-appearance: none; /* 네이티브 외형 감추기 */
-moz-appearance: none;
appearance: none;
}
jQuery(script열고닫아서사용)
$(document).ready(function(){
var fileTarget = $('.filebox .upload-hidden');
fileTarget.on('change', function(){ // 값이 변경되면
if(window.FileReader){ // modern browser
var filename = $(this)[0].files[0].name;
}
else { // old IE
var filename = $(this).val().split('/').pop().split('\\').pop(); // 파일명만 추출
}
// 추출한 파일명 삽입
$(this).siblings('.upload-name').val(filename);
});
});
파일필드이미지구현
html
<div class="filebox preview-image">
<input class="upload-name" value="파일선택" disabled="disabled" >
<label for="input-file">업로드</label>
<input type="file" id="input-file" class="upload-hidden">
</div>
css
/* imaged preview */
.filebox .upload-display { /* 이미지가 표시될 지역 */
margin-bottom: 5px;
}
@media(min-width: 768px) {
.filebox .upload-display {
display: inline-block;
margin-right: 5px;
margin-bottom: 0;
}
}
.filebox .upload-thumb-wrap { /* 추가될 이미지를 감싸는 요소 */
display: inline-block;
width: 54px;
padding: 2px;
vertical-align: middle;
border: 1px solid #ddd;
border-radius: 5px;
background-color: #fff;
}
.filebox .upload-display img { /* 추가될 이미지 */
display: block;
max-width: 100%;
width: 100% \9;
height: auto;
}
- 이미지 업로드시 추가될 구조에 대한 스타일을 지정한다.
- 이미지는 반응형으로 작동하고, 크기를 변경하려면 .upload-thumb-wrap의 너비를 수정하면 된다.
- 이전 예제의 CSS에서 위의 내용을 추가로 삽입하면 된다.
기능 추가를 위해 jQuery 코드를 추가한다.
//preview image
var imgTarget = $('.preview-image .upload-hidden');
imgTarget.on('change', function(){
var parent = $(this).parent();
parent.children('.upload-display').remove();
if(window.FileReader){
//image 파일만
if (!$(this)[0].files[0].type.match(/image\//)) return;
var reader = new FileReader();
reader.onload = function(e){
var src = e.target.result;
parent.prepend('<div class="upload-display"><div class="upload-thumb-wrap"><img src="'+src+'" class="upload-thumb"></div></div>');
}
reader.readAsDataURL($(this)[0].files[0]);
}
else {
$(this)[0].select();
$(this)[0].blur();
var imgSrc = document.selection.createRange().text;
parent.prepend('<div class="upload-display"><div class="upload-thumb-wrap"><img class="upload-thumb"></div></div>');
var img = $(this).siblings('.upload-display').find('img');
img[0].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enable='true',sizingMethod='scale',src=\""+imgSrc+"\")";
}
});
'프로젝트 > 첫번째 jsp eclipes html 을 활용한..' 카테고리의 다른 글
계층형,답변 게시판 (0) | 2023.02.02 |
---|---|
댓글달기 기능 구현 (0) | 2023.02.02 |
개행처리 (0) | 2023.02.02 |
view.jsp + 조회수처리,첨부파일 게시 및 다운처리,a태그 location.href (0) | 2023.02.02 |
검색어입력 (0) | 2023.02.01 |
댓글