Загрузка изображения через type=file

224
10 декабря 2016, 10:37

При загрузке изображения в БД через поле file вместо обычного пути выводится C:fakepathmail.png. При этом изображение не выводится. В интернете нашел, что это сделано для безопасности. Можно как-то решить эту проблему или есть какие-то альтернативные пути хранения изображения ? (изображения нужны для аватарки пользователя)

Answer 1

Такой путь по соображениям безопасности сделан: C:fakepath.
Получить реальный путь нельзя, разве что через 0-day браузера...

Вывести выбранное изображение можно и без пути, который, кстати, бесполезен, ведь доступа к ФС клиента у JS нет и слава Богу.

Предпросмотр картинки можно сделать так:

document.addEventListener('DOMContentLoaded', e => { 
  let file = document.querySelector('#file'),        // Выбираем нужные 
      preview = document.querySelector('#preview');  // элементы 
   
  file.addEventListener('change', e => { // При изменении input 
    if(file.files.length === 0) // Если ничего не выбрано - выходим 
      return; 
     
    let f = file.files[0],     // Берём первый файл 
        fr = new FileReader(); // Создаём объект чтения файлов 
     
    // В свойсте type mime (что-то типа image/png) 
    if(f.type.indexOf('image') === -1) // Если файл не является изображением - выходим 
      return; 
     
    fr.onload = e => { 
      if(getComputedStyle(preview, null).display === 'none') // Если нужно - показываем img 
        preview.style.display = 'block'; 
       
      preview.src = e.target.result; // В src будет что-то типа data:image/jpeg;base64,.... 
    } 
    fr.readAsDataURL(f); // Читаем blob выбранного файла 
  }); 
});
#preview{ 
  display: none; 
}
<input type='file' id='file' /><br /><br /> 
<img src='' id='preview' />

Answer 2

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

И если я правильно понял, то вот вам рабочий пример:

$(document).on('ready', function(){ 
  function readURL(input) { 
 
    if (input.files && input.files[0]) { 
        var reader = new FileReader(); 
 
        reader.onload = function (e) { 
            $('#image').attr('src', e.target.result); 
        }; 
 
        reader.readAsDataURL(input.files[0]); 
    } 
  } 
 
  $("#imgInput").change(function(){ 
    readURL(this); 
  }); 
});
.input-file-row-1:after { 
    content: "."; 
    display: block; 
    clear: both; 
    visibility: hidden; 
    line-height: 0; 
    height: 0; 
} 
 
.input-file-row-1{ 
    display: inline-block; 
	margin-top: 25px; 
	position: relative; 
} 
 
html[xmlns] .input-file-row-1{ 
    display: block; 
} 
 
* html .input-file-row-1 { 
    height: 1%; 
} 
 
.upload-file-container {  
	position: relative;  
	width: 100px;  
	height: 137px;  
	overflow: hidden;	 
	background: url(http://i.imgur.com/AeUEdJb.png) top center no-repeat; 
	float: left; 
	margin-left: 23px; 
}  
 
.upload-file-container:first-child {  
	margin-left: 0; 
}  
 
.upload-file-container > img { 
	width: 93px; 
	height: 93px; 
	border-radius: 5px; 
	-webkit-border-radius: 5px; 
	-moz-border-radius: 5px; 
} 
 
.upload-file-container-text{ 
	font-family: Arial, sans-serif; 
	font-size: 12px; 
	color: #719d2b; 
	line-height: 17px; 
	text-align: center; 
	display: block; 
	position: absolute;  
	left: 0;  
	bottom: 0;  
	width: 100px;  
	height: 35px; 
} 
 
.upload-file-container-text > span{ 
	border-bottom: 1px solid #719d2b; 
	cursor: pointer; 
} 
 
.upload-file-container input  {  
	position: absolute;  
	left: 0;  
	bottom: 0;  
	font-size: 1px;  
	opacity: 0; 
	filter: alpha(opacity=0);	 
	margin: 0;  
	padding: 0;  
	border: none;  
	width: 70px;  
	height: 50px;  
	cursor: pointer; 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<form name="" method="post" action="#" enctype="multipart/form-data" class="feedback-form-1"> 
				<fieldset> 
										 
					<div class="input-file-row-1"> 
					 
						<div class="upload-file-container"> 
							<img id="image" src="#" alt="" />						 
							<div class="upload-file-container-text"> 
								<span>Add<br />photo</span> 
								<input type="file" name="pic[]" class="photo" id="imgInput" /> 
							</div> 
						</div>				 
										 
					</div>			 
				</fieldset> 
			</form>

READ ALSO
блок изменяющийся на textarea при нажатии

блок изменяющийся на textarea при нажатии

Есть тег или атрибут для div но не могу его найтиПри нажатии на div он изменялся на textarea и в нем можно было изменять содержымое блока

268
Тестировать бутстрап сайтf на смартфоне выявило некоторые ошибки

Тестировать бутстрап сайтf на смартфоне выявило некоторые ошибки

Всем привет, Пробую тестировать свой бутстрап сайт на смартфоне(Fly IQ450 Horizon 2) и вижу несколько ошибок, которые не отображались ни в браузере...

219
Вывести логотип по центру

Вывести логотип по центру

ЗдравствуйтеНе как не выходит вывести логотип по центру

314