2017-02-11 8 views
0

Я реализую загрузчик изображений с перетаскиванием с вызовом ajax, Я увидел учебник по этому вопросу и реализован так, как этот, с этим кодом я могу сохранить изображение в .jpg только формат! (или какой-либо один формат, который я указываю в коде)php: // входное изображение Uplaod с изображением типа

загруженное изображение сохраняется в PHP: // ввод папку раньше, и мы должны захватить этот образ из этой временной папки для сохранения, что на сервере,

, но они ничего не говорят, чтобы изменить формат изображения в соответствии с типом изображения,

теперь я хочу загрузки изображение в оригинальном формате , как я могу собрать изображение информация во время ее загрузки?

здесь код

<?php 
     $str =file_get_contents('php://input'); 
     $filename = md5(time()).'.jpg'; 
     $path = 'upload/'.$filename; 
     file_put_contents($path,$str); 
     echo $path; 

вот некоторые JS для принятия изображения и отправки Ajax запроса:

$(function(){ 

     //select the drop container 
     var obj = $('.drop'); 

     // dragover event listener 
     obj.on('dragover',function(e){ 
      e.stopPropagation(); 
      e.preventDefault(); 
      $(this).css('border',"2px solid #16a085"); 
     }); 

     //drop event listener 
     obj.on('drop',function(e){ 
      e.stopPropagation(); 
      e.preventDefault(); 
      $(this).css('border',"2px dotted #bdc3c7"); 

      //get the files 
      var files = e.originalEvent.dataTransfer.files; 
      var file =files[0]; 
      //console.log(file); 

      //upload data using the xhr object 
      upload(file); 

     }); 

     function upload(file){ 

      //create xhr object 
      xhr = new XMLHttpRequest(); 

      //initiate request 
      xhr.open('post','drop.php',true); 

      //set headers 
      xhr.setRequestHeader('Content-Type',"multipart/form-data"); 
      xhr.setRequestHeader('X-File-Name',file.fileName); 
      xhr.setRequestHeader('X-File-Size',file.fileSize); 
      xhr.setRequestHeader('X-File-Type',file.fileType); 

      //send the file 
      xhr.send(file); 
     } 

    }); 
+0

Вы посылаете тип файла в заголовке 'X-File-type', поэтому попробуйте и получить его с: '$ _SERVER ['HTTP_X_FILE_TYPE']'. –

+0

Нет, я не могу, я попробовал только сейчас, он экономит без расширения! –

+0

Что вы подразумеваете под _ "сохранение без расширения" _? Проверьте, что содержит этот заголовок с параметром 'var_dump ($ _ SERVER)'. Это может быть тип mime, а не расширение. –

ответ

0

Наконец, я установил эту проблему.

не было никаких проблем с PHP, чтобы поймать заголовки, а Magnus Eriksson сказал $ _SERVER [ «HTTP_X_FILE_TYPE»] работает нормально, но проблема была при отправке АЯКС заголовок мы устанавливаем тип и размер неправильный заголовок.

я регистрируемые данные файла и найти тип и размер но я установить заголовок, как FILETYPE и FileSize

изменил код и вот код до и после:

ДОБРОСА: AJAX запрос:

// задать заголовки
xhr.setRequestHeader ('Content-Type', "multipart/form-data");
xhr.setRequestHeader ('X-File-Name', file.fileName);
xhr.setRequestHeader ('X-File-Size', file.fileSize);
xhr.setRequestHeader ('X-File-Type', file.fileType);

и PHP:

$str =file_get_contents('php://input'); 
$filename = md5(time()).'.jpg'; 
$path = 'upload/'.$filename; 
file_put_contents($path,$str); 
echo $path; 

ПОСЛЕ: AJAX запрос:

// набор заголовков
xhr.setRequestHeader ('Content-Type', "многочастному/форма -данные");
xhr.setRequestHeader ('X-File-Name', file.fileName);
xhr.setRequestHeader ('X-File-Size', file.size);
xhr.setRequestHeader ('X-File-Type', file.type);

и PHP:

$str =file_get_contents('php://input'); 
$ext = $_SERVER['HTTP_X_FILE_TYPE']; 
$e = explode("/",$ext); 
$ext = $e[1]; 
$filename = md5(time()).'.'.$ext; 
$path = 'upload/'.$filename; 
file_put_contents($path,$str); 
echo $path; 

этот код работает отлично :)