Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Загрузка файла и его просмотр (https://javascript.ru/forum/events/40032-zagruzka-fajjla-i-ego-prosmotr.html)

vladimircape 22.07.2013 12:28

Загрузка файла и его просмотр
 
Вот сама форма
<img id='img'/>	
		<form name="uploadImage" id="uploadImage" enctype="multipart/form-data" action="index2.php?progress=<?php echo($uiq)?>" method="post" class="well">
			<label>Upload File</label>
			<input type="file" name="userImage" id="userImage" />
			<span class="badge badge-info" style="display:none;">0%</span>
			<input type="submit" class="btn btn-success" name="upload_image" id="upload_image" value="UPLOAD FILE" />
			<div class="progress" style="display:none;"><div class="bar" style="width:0%;"></div></div>
			<input type="text" name="text-field"/>
		</form>

Суть в том что при форма работает если действовать по следующим шагам, выбрать файл и нажать загрузить картинку , и картинка появляется на экране ,без перезагрузки, а я сейчас хочу сделать чтобы картинка сразу появлялась как только выбрана, т.е. убрать шаг в котором ты нажимаешь клавишу Загрузить выбранное фото.
Вот код PHP
if(isset($_GET['progress_key']) and !empty($_GET['progress_key'])){
$status = apc_fetch('upload_'.$_GET['progress_key']);
    echo $status['current']/$status['total']*100;	
exit;

а вот сам JS
$(document).ready(function(){
var randIDS = '<?php echo $uiq?>';
var loader;
// Add Hidden Field
var hidden = $("<input>");
hidden.attr({
name:"APC_UPLOAD_PROGRESS",
id:"progress_key",
type:"hidden",
value:randIDS
});

  /*$("form").submit(function(event){      
   });*/



$("#uploadImage").prepend(hidden);
$("#userImage").change(function(){
//$("#uploadImage").submit(function(){

var p = $("#uploadImage");
p.attr('target','tmpForm');

// creating iframe
if($("#tmpForm").length == 0){
var frame = $("<iframe>");
frame.attr({
name:'tmpForm',
id:'tmpForm',
action:'about:blank',
border:0
}).css('display','none');
p.after(frame);
}
// Start file upload
$.get("get_progress.php", {progress_key:randIDS, rand:Math.random()},
	function(data){
		var uploaded = parseInt(data);
		if(uploaded == 100){
			$(".progress, .badge").hide();			
			var filename=$('input[type=file]').val();			
			$('#img').attr('src','uploads/'+filename);
			clearInterval(loadLoader);			
		}
		else if(uploaded < 100)
		{				
		}
		if(uploaded < 100)
			loader = setInterval(loadLoader,100);
	});

var loadLoader = function(){
$.get("get_progress.php", {progress_key:randIDS, rand:Math.random()}, function(data)
{
var uploaded = parseInt(data);
if(uploaded == 100){	
			var filename=$('input[type=file]').val();			
			$('#img').attr('src','uploads/'+filename);
			clearInterval(loader);
}
else if(uploaded < 100)
{
$(".progress, .badge").show();
$(".badge").text(uploaded+"%");
var cWidth = $(".bar").css('width', uploaded+"%");
}
});
}
});});

У меня когда просто последовательные шаги, выбрать а потом загрузить всё работает, когда я попылся убрать шаг загрузить и грузить сразу после выбора, сервер почему-то не находит этот файл загруженный постоянно возвращает 0 байт.

mta88 22.07.2013 12:56

не особо вникал в ваш код и его проблемы, но проблема предпросмотра изображений перед загрузкой давно решена с помощью FileReader api (работает не во всех браузерах)
developer.mozilla.org/en-US/docs/Web/API/FileReader -- здесь есть пример

и возможно с помощью flash (но во flash я не разбираюсь, ничего посоветовать не могу)

vladimircape 23.07.2013 10:40

Готовых решений не надо предлагать, я и сам их знаю, надо сделать всё самому.

mta88 23.07.2013 10:54

Цитата:

Сообщение от vladimircape (Сообщение 263739)
Готовых решений не надо предлагать

чем отличается готовое решение от сырого?

Цитата:

я и сам их знаю
а зачем спрашиваете?

Цитата:

надо сделать всё самому
что это значит?


Часовой пояс GMT +3, время: 19:51.