Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

P3rukao

Upload de arquivos de audio

Recommended Posts

Aew galera... eu sei que este tópico eh bastante procurado, e muito possivelmente já tem alguma solução pra isso por aew.. mas eu não estou achando em canto nenhum...

 

Eu já fiz aqui, um sisteminha de upload multiplo de imagens... "que está praticamente terminado"

 

Agora me apareceu esse de ter que enviar um arquivo de audio para o servidor....

Eu imagino que o normal seja enviar em formato .mp3, mas se tiver a possibilidade de ser mais aberto aos outros tipos seria mais ideal =/

 

Eu vi muitos por ai... e a maioria restringe o tamanho dos arquivos para até 2mb, e no meu caso isso naum serve de "jeito-maneira-nenhuma"... pois os arquivos serão de um programa de rádio, e por isso, podem chegar a ser bem grandinhos.. !!!

 

 

» Se tiver algum post sobre isso, talvez já ajude...

» Mas se souberem me explicar, fica melhor ainda.. ;)

 

 

Att. Gabriel Lau

Compartilhar este post


Link para o post
Compartilhar em outros sites

para restringir os tipos, basta verificar os mime-types, assim como se faz com as imagens.

Para limitar o tamanho também é simples: basta fazer um IF, da mesma forma como fez com as imagens.

 

Não há muita diferença.

 

Qual é a dúvida/dificuldade?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nesse site que estou fazendo, também terá uma parte de sistema de videos... que nesse caso, eu optei por pegar apenas uma URL do youtube... (que eu usaria como servidor dos videos)..

 

» Eu não conheço, mas.. existe algum servidor no estilo do youtube para guardar arquivos de áudio???

Compartilhar este post


Link para o post
Compartilhar em outros sites

A minha dúvida... no mais... eh porque para as imagens, eu estou usando uma classe que faz todo o tratamento da imagem, tipo, tamanho, extensão, etc, mas que também não está 100% completo.. (eu a publiquei em outro post por aqui tbm)....

Essa classe tá bem grandinha.... e me dá medo soh de olhar pra ela... :blink:

 

Para esse de mp3, pelo que eu vi por aí a fora, não precisa ser muito grandinha não, apenas pegar o arquivo enviado, verificar o mime, o tamanho, e fazer a copia...

 

Mas nenhum dos que eu testei aqui.. funcionou... e nem parecem ser muito confiáveis....

 

» Queria uma indicação, de algum que v6 confiem, e que saibam que funciona mermo...

» ... ou então uma explicaçãoZinha de como fazer um.... pra ver se eu perco esse medo e entendo de uma vez http://forum.imasters.com.br/public/style_emoticons/default/upset.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como o Beraldo disso, o upload do arquivo você vai fazer assim como você faz com a imagem... só tem que fazer a validação usando o mime/type correto...

 

o grande problema no seu caso deve ser a limitação de tamanho de arquivo, dai você tem que ver no seu servidor se tem como mudar (dificil, geralmente so liberam pra servidor dedicado)... é só alterar o valor de upload_max_filesize no PHP.ini , mas so o servidor tem acesso...

Compartilhar este post


Link para o post
Compartilhar em outros sites

tutoriais sobre Upload existem de sobra. dê uma pesquisada. Estude alguns deles.

 

Basicamente, basta verificar os mime-types. Para saber quais são eles, veja este site:

http://filext.com/file-extension/mp3

 

Para verificar o tamanho, basta um IF. Lembre-se de que o tamanho vem em bytes. Para permitir arquivos de até 20 MB:

$maximo = 20 * 1024 * 1024;

Aí vocÊ verifica se o tamanho é maior que $maximo. Se for, impessa o envio.

 

Para fazer o upload, pode usar move_uploaded_file, mesmo

 

Veja também

http://www.php.net/manual/pt_BR/features.file-upload.php

 

 

 

 

é só alterar o valor de upload_max_filesize no PHP.ini

upload_max_filesize e post_max_size. Os dois têm de ser alterados.

Detalhe: dá para alterar por htaccess também. :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

ehh.. acho que vou ter problemas com isso aew... o meu servidor eh o LOCAWEB... e ele já deu bronca em um monte de coisinha besta... =/

 

 

Vou dar uma sacada nisso q v6 falaram....

Mas vou ter que procurar por servidores que armazenem esses arquivos de audio... pq sinaum axo que naum vai rolar...

 

Obrigado pelas dicas... mas o tópico continua em aberto!!

 

Se tiverem mais sugestões... podem p or aí!!!

 

[...]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu achei esse script aqui...

 

<?
// Prepara a variável caso o formulário tenha sido postado
$arquivo = isset($_FILES["midia"]) ? $_FILES["midia"] : FALSE;

$config = array();
// Tamano máximo da midia, em bytes
$config["tamanho"] = 106883;

// Diretório onde a midia será salva
$config["diretorio"] = "midia/";

// Gera um nome para a midia e verifica se já não existe, caso exista, gera outro nome e assim sucessivamente..
// Função Recursiva

function nome($extensao)
{
	global $config;

	// Gera um nome único para a midia
	$temp = substr(md5(uniqid(time())), 0, 10);
	$midia_nome = $temp . "." . $extensao;
	
	// Verifica se o arquivo já existe, caso positivo, chama essa função novamente
	if(file_exists($config["diretorio"] . $midia_nome))
	{
		$midia_nome = nome($extensao);
	}

	return $midia_nome;
}

if($arquivo)
{	
	$erro = array();
	
	// Verifica o mime-type do arquivo para ver se é de midia.
	// Caso fosse verificar a extensão do nome de arquivo, o código deveria ser:
	if(!eregi("^audio\/(mp3|mpeg|mpeg3|mpg)$", $arquivo["type"]))
	{
		$erro[] = "Arquivo em formato inválido! A midia deser mp3 ouo etc. Envie outro arquivo";
	}
	else
	{
		// Verifica tamanho do arquivo
		if($arquivo["size"] > $config["tamanho"])
		{
			$erro[] = "Arquivo em tamanho muito grande! A midia deve ser de no máximo " . $config["tamanho"] . " bytes. Envie outro arquivo";
		}
	}

	if(sizeof($erro))
	{
		// Pega extensão do arquivo, o indice 1 do array conterá a extensão
		preg_match("/\.(mp3|mpeg|mpeg3|mpg){1}$/i", $arquivo["name"], $ext);
		
		// Gera nome único para a midia
		$midia_nome = nome($ext[1]);

		// Caminho de onde a midia ficará
		$midia_dir = $config["diretorio"] . $midia_nome;

		// Faz o upload da midia
		move_uploaded_file($arquivo["tmp_name"], $midia_dir);
		echo "mensagem de sucesso (somente para teste)";
	}
}
?>

Mas tenho receio se está certo ou não...pois numa das ultimas condicionais acima

if(sizeof($erro))

estava originalmente como if(!sizeof($erro))... que eh como eu também acho que está correto...

mas dessa forma original ele não move o arquivo... já tirando o !, ele transfere certinhho.

 

» O código está correto assim???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esse eh o script que eu uso para o upload das imagens... ele atende praticamente todas as minhas necessidades... só não consigo usá-la para upload multiplos.... mas enfim!!!

 

<?php
	### Classe Upload
	### Autor: Xorna (falecomoxorna@blogdoxorna.com) Mantenha estes créditos!
	## Faz o upload de imagens, muda seu nome e redimensiona ao mesmo tempo
	# Versão 1.0
	/*http://www.blogdoxorna.com/classe-upload-simples-e-compacta/*/
class upload{
	# Declaração das propriedades
	private $nome;
	private $arquivo;
	private $tipo;
	private $tamanho;
	private $temp;
	private $mime = array('audio/mp3','audio/mpeg','audio/mpeg3','audio/mpg');
	private $ext;
	private $tamanho_max = 6000000;
	private $nomeImagem;
	### Método construtor
	## Paramentro: o array do arquivo a ser gravado
	# Pega os dados a partir do array arquivo
	public function __construct($arquivo){
		$this->nome = $arquivo['name'];
		$this->tipo = $arquivo['type'];
		$this->tamanho = $arquivo['size'];
		$this->temp = $arquivo['tmp_name'];
	}

	# Verifica o MIME da imagem
	public function verifica(){
		if(in_array($this->tipo, $this->mime)){
			$valida = true;
		}else{
			$valida = false;
		}
		return $valida;
	}

	# Abre uma imagem de acordo com seu MIME
	public function abreImagem($img){
		switch($this->tipo){
			case "image/gif":
				$imagem = imagecreatefromgif($img);
				$this->ext = "gif";
				break;
			case "image/png":
				$imagem = imagecreatefrompng($img);
				$this->ext = "png";
				break;
			case "image/bmp":
				$imagem = imagecreatefrompng($img);
				$this->ext = "bmp";
				break;
			default:
				$imagem = imagecreatefromjpeg($img);
				$this->ext = "jpg";
			break;
		}
		return $imagem;
	}

	## Mero método para facilitar a vida de quem usa
	# Ele pega um path relativo e transforma em absoluto
	public function ajustaPath($path){
		$path = realpath($path);
		$path = str_replace("\\", "/", $path);
	}

	### Método para o upload
	## Parametros:
	## $nova_largura
	## $path (endereço relativo)
	## $novo_nome
	# abre a imagem, redimensiona e salva no lugar especificado com o nome especificado
	public function redimensiona_salva($nova_largura, $path, $novo_nome){
		if($this->verifica() && $this->tamanho <= $this->tamanho_max){
			$this->ajustaPath($path);
			$img = $this->abreImagem($this->temp);
			$largura_original = imagesx($img);
			$altura_original = imagesy($img);
			$razao = $altura_original/$largura_original;
			$nova_altura = $nova_largura * $razao;
			
			$nova_imagem = "";
			if($largura_original > $nova_largura)
			{			
				$nova_imagem = imagecreatetruecolor($nova_largura, $nova_altura);
			}
			else
			{
				$nova_imagem = imagecreatetruecolor($largura_original, $altura_original);
			}
			
			$nome = uniqid($novo_nome) . substr($this->nome, strlen($this->nome)-3);			
			$novo_nome = substr($nome,0, strlen($nome)-3);
			
			$this->nomeImagem = $novo_nome.".".$this->ext;
			
			imagecopyresampled($nova_imagem, $img, 0, 0, 0, 0, $nova_largura + 1, $nova_altura + 1, $largura_original, $altura_original);
			imagejpeg($nova_imagem, "$path/$novo_nome.$this->ext", 95);
		
			imagedestroy($img);
			imagedestroy($nova_imagem);
		}else{
			# Falta inventar algo para validar isso…
			# Inventa você aí…
		}
	}
	
	public function getNomeFile(){
		$nomeFile = $this->nomeImagem;
		
		return $nomeFile;
	}

	public function __destruct(){

	}
} //end class
?>

» Alguém pode me dar uma ajuda para transformar isso em upload de mp3????

 

Como ele está estruturado como uma classe, fica bem mais fácil de manipular o envio dos arquivos.... se tiver como passar para MP3.. fica Show de bola.. :)

 

Eu tava pensando aqui... seria uma boa se conseguissemos transformar essa classe, numa que abrangesse uploads no geral...

tipo, de modo que quando for montar o formulário para o envio do arquivo... pudessemos escolher se eh uma imagem, ou audio, ou outro arquivo qqr, esconlher tamanho maximo, mudar nome, redimensionar (caso imagem), e muitas outras coisas.!!! Resolveria de vez esse assunto!!!

 

Fica aew pra estudos futuros..... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo... eu vi isso aqui...

 

Mas alguem sabe como eu organizo essa classe, para ela funcionar para os arquivos de áudio??

 

Por enquanto, eu quero apenas para audio... então podem detoná-la... as outras opções não precisa entrar no assunto agora!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Beraldo, eu usei o !count($erro), mas ele não funciona aqui... tenho tirar o ! para funcionar, eu não estou conseguindo ver a lógica disso, apesar de ser bem simples!!!

 

Me esclarece isso aí, por favor!!!

 

» Como seria o tratamento correto para esse upload???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já viu o botão "Editar"? Com ele, você edita seu post em vez de criar um monte, um em seguida do outro. :angry:

Lembre-se de que flood é contra as regras...

 

 

tente com:

if ( count($erro) == 0 )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi mal pelos varios posts seguidos, não eh minha intenção fazer esse negoço de "flood" q você disse.. <_< :angry:

 

 

esssa parte do count está funcionado se eu ponho como if ( count($erro) ), mas se usar o !count, ele dá o erro q eu mencionei.. (eu já disse isso ¬¬, no primeiro script, post #8)

 

O problema que deu dps, eh que mesmo com a verificação do mime, ele ainda está aceitando qqr tipo de arquivo, e naum só os de áudio com os formatos que eu especifiquei!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

o count vai te retornar qual é o numero de elementos do array

 

então

 

count($erro) == 0

 

vai te dizer que não há nada no array de erros... e ai você pode enviar o conteudo...

 

o count não é uma função que retorna um valor booleano, ele retorna um inteiro, por isso não é muito bom testar com ! ...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo DARK... isso eu entendi agora... mas e a verificação do mime.... está errada em alguma parte???

 

 

Creio eu que usando a classe que eu mostrei no segudo script (post#9), fique bem mais fácil de manipular as coisas aí....

Eu tow tentando adaptá-la para o sistema de upload de audio... mas parei na função redimensiona_salva() e na abreImagem();

 

Como são arquivos de áudio, eu nã opreciso redimensionar nada (isso eh obvio ¬¬), mas não sei o que tenho que fazer em seguida...

 

» O que devo substituir nessa casse e talz... para funcionar para o upload de audios???

 

Por exemplo:

Para imagem ele usa imagecreatetruecolor, imagecopyresampled, imagejpeg, imagedestroy e imagecreatefrompng para aplicar as funções nas imagens, como redimensionar a imagem, colocar novo nome... e etc e talz...

 

» Para o Áudio, o que eu preciso fazer tanto, para copiar o audio, modificando o seu nome, por exemplo????

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse abre imagem você provavelmente não vai precisar, ele seria so pro caso de redirecionar a imagem

 

o melhor, é você apagar esass funções que estão muito relacionadas a imagem e fazer so o envia arquivo

 

 

public funtion salvaMp3($arquivo) {

	 //verifica mime isso ta na função verifica, mas com e so pra mp3 vou fazer aqui mesmo
	if ($arquivo['type') != 'audio/mpeg') {
		$msg = "tipo invalido";
		return $msg;
	}

	//se o tipo tiver ok você envia
	if (move_uploaded_file($arquivo['tmp_name'], "caminho/".$arquivo['name'])) {
			$msg = "arquivo enviado";
			return $msg;
		}
		else {
			$msg = "falha ao enviar arquivo";
			return $msg;
		}
	 
}

quando você for chamar o salvaMp3, você chama ele usando o arquivo como parametro, algo como

 

salvaMp3($_FILES['mp3']);

 

qualquer coisa de uma olhada nesse artigo

http://imasters.com.br/artigo/1057/php/_files/

Compartilhar este post


Link para o post
Compartilhar em outros sites

esssa parte do count está funcionado se eu ponho como if ( count($erro) ), mas se usar o !count, ele dá o erro q eu mencionei.. (eu já disse isso ¬¬, no primeiro script, post #8)

Por isso falei para você usar o operador de igualdade... http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif

 

 

O problema que deu dps, eh que mesmo com a verificação do mime, ele ainda está aceitando qqr tipo de arquivo, e naum só os de áudio com os formatos que eu especifiquei!!!!

esse erro, assim como todos os outros, são em decorrência da condicional que você está tentando fazer funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.