file_preview.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. function opennamu_file_preview() {
  2. const input = document.getElementById('file_input');
  3. const preview = document.getElementById('preview');
  4. if (!input || !preview) return;
  5. input.addEventListener('change', () => {
  6. preview.innerHTML = '';
  7. Array.from(input.files).forEach(file => {
  8. const mime = file.type;
  9. if (mime.startsWith('image/')) {
  10. const img = document.createElement('img');
  11. img.src = URL.createObjectURL(file);
  12. img.onload = () => URL.revokeObjectURL(img.src);
  13. img.style.maxWidth = '100%';
  14. preview.appendChild(img);
  15. } else if (mime === 'application/pdf') {
  16. const embed = document.createElement('embed');
  17. embed.src = URL.createObjectURL(file);
  18. embed.type = 'application/pdf';
  19. embed.style.width = '100px';
  20. embed.style.height = '120px';
  21. embed.style.marginRight = '0.5em';
  22. preview.appendChild(embed);
  23. } else if (mime.startsWith('text/') || mime === '') {
  24. const reader = new FileReader();
  25. reader.onload = () => {
  26. const pre = document.createElement('pre');
  27. pre.textContent = reader.result.slice(0, 200) + '...';
  28. pre.style.border = '1px solid #ccc';
  29. pre.style.padding = '0.5em';
  30. pre.style.maxWidth = '200px';
  31. pre.style.whiteSpace = 'pre-wrap';
  32. preview.appendChild(pre);
  33. };
  34. reader.readAsText(file);
  35. }
  36. const p = document.createElement('p');
  37. p.textContent = `파일명: ${file.name}, 크기: ${Math.round(file.size / 1024)} KB`;
  38. preview.appendChild(p);
  39. });
  40. });
  41. }