Arquivos nuvem Rackspace: imagem Carregar para arquivos em nuvem Rackspace usando PHP
Pergunta
Eu estou fazendo um projeto onde o usuário pode fazer upload de imagens imagem do perfil ou imagem como para a sua imagem gallary. agora fazer o upload de todas as imagens para o meu servidor.
Agora, eu quero carregar tudo isso para os meus arquivos em nuvem Rackspace diretamente usando script php. Por exemplo:
- usuário selecionar um arquivo
- clique em enviar algumas informações
- o arquivo selecionado será enviado para o servidor rackspace e retornar o local do arquivo.
- , em seguida, o local do arquivo junto com outras informações serão salvas no meu banco de dados.
- , então eu vou mostrar o arquivo ou imagem a partir desse local.
para fazer u tem alguma idéia, exatamente como eu posso fazer isso?
Eu estou usando:
- framework CodeIgniter
- jQuery como biblioteca javascript
Agradecemos antecipadamente por qualquer resposta.
Solução
Update: Embora o método que eu descrevo abaixo continuará a funcionar, não é possível fazer upload de arquivos diretamente usando tokens (graças a DesignerGuy para essa informação ). Você pode ler mais sobre como fazer isso aqui . Gostaria também de mencionar que os serviços como transloadit agora fazer esse tipo de coisa trivialmente fácil usando inserções jquery em formulários HTML. Ainda assim, o método que eu descrevo abaixo ainda funciona e, provavelmente, lhe dá mais controle.
Você não pode carregar arquivos -directly- a arquivos Rackspace, sem tentar algo como a incorporação de suas credenciais Rackspace no formulário. Mesmo que isso fosse possível, não seria uma boa idéia. (Ou seja, o usuário pode adicionar conteúdo em massa usando suas credenciais que não têm nada a ver com sua aplicação). Assim, para obter o que você quer, que é essencialmente para que o arquivo armazenado a Rackspace, e a localização do arquivo armazenado em seu servidor, é necessário modificar o seu fluxo de trabalho. Ele precisa ser:
- Form uploads de arquivos para -seu servidor -
- -seu server calculado o recipiente eo nome do arquivo que o arquivo usará
- -seu server carrega o arquivo temporário para arquivos Rackspace
Se você deseja que o arquivo a ser publicamente para download ...
- -seu server permite que o arquivo para ser servido através da CDN, fazendo uma URL pública para o arquivo que o acesso do usuário pode.
- Quando o servidor cria html ele incorpora as urls CDN e o usuário recebe magicamente os arquivos
Se você deseja que o arquivo a ser apenas os baixáveis ??por -certain- usuários ....
- -seu server autentica com Rackspace e os downloads do arquivo temporariamente
- -seu server serve o arquivo e o HTML tanto do seu servidor
Você não pagar por largura de banda entre -seu arquivos Rackspace server e, se -seu server é também uma instância de nuvem Rackspace ou Rackspace regulares Servidor Gerenciado (ou pelo menos é o que o suporte ao cliente me disse). Um fato importante no cálculo das taxas entre Amazon e Rackspace.
Assim, você pode usar arquivos Rackspace como um enorme disco rígido para o seu servidor, o que lhe dá o controle sobre o acesso, ou você pode usá-lo como uma rede pública de distribuição maciça ... Mas em ambos os casos, você pode precisar alterar a ordem dos passos para lhe dar o que você quer ...
Você também pode olhar para um exemplo simples de usar o PHP para fazer upload de um arquivo recolhidas a partir de um formulário HTML para arquivos Rackspace .
Outras dicas
a partir welcome.php:
function index()
{
if(!empty($_FILES)){
require('system/libraries/cloudfiles.php');
$upload_dir = 'upload/doc/2';
$tmp_name = $_FILES['upload']['tmp_name'];
$name = $_FILES['upload']['name'];
move_uploaded_file($tmp_name,"$upload_dir/$name");
$username = 'ABC';
$key = 'X';
$auth = new CF_Authentication($username, $key);
$auth->authenticate();
$conn = new CF_Connection($auth);
$container = $conn->get_container('documents');
$localfile = "$upload_dir/$name";
$object = $container->create_object($name);
$object->load_from_filename($localfile);
}
$this->load->view('global_header');
$this->load->view('welcome_message');
}
a partir welcome_message.php:
<form method="post" action="#" enctype="multipart/form-data"s>
<input type="file" name="upload"><br/>
<input type="submit">
</form>
problemas que encontrei:
cacert.pem ~ precisa desse arquivo para ir em seu diretório web e vem com a api.
Você pode precisar fileinfo de pecl, e para isso você pode precisar libmagic (se você não tiver já).
Você também precisa do pacote php5-curl e php não reportar erros onda, então cavar o api e adicione um pouco de saída, se ele não está funcionando.
Muitas dessas respostas são antigos e olhando resposta Eu acho que deve ter havido muitas mudanças para a API desde então. E desde ftrotter já explicado sobre a tentativa de upload diretamente, vou mostrar-lhe uma versão atualizada (PHP 5.3 estilo) de como enviar os arquivos do diretório PHP tmp.
Primeiro vamos supor que você já instalou o API usando compositor.
Primeiro você vai precisar incluir o seu carregador automático e, em seguida, adicione o namespace use
.
require 'vendor/autoload.php';
use OpenCloud\Rackspace as Rackspace;
Então você simplesmente configurar a instância do cliente
// first setup the client using your portal username and API key
$client = new Rackspace(Rackspace::US_IDENTITY_ENDPOINT, array(
'username' => 'YOUR-USERNAME',
'apiKey' => 'YOUR-API-KEY'
));
$region = 'DFW'; // can be ORD or various others and must be set
// now get the container
$container = $client->objectStoreService('cloudFiles', $region)
->getContainer('YOUR-CONTAINER');
Agora que você tem o seu recipiente que você pode simplesmente configurar o seu conjunto de arquivos e enviá-los. Aqui está uma maneira rápida e suja:
if (isset($_FILES)) {
$files = array();
foreach ($_FILES as $file) {
if (0 === $file['error']) {
$files[] = array(
'name' => $file['name'],
'path' => $file['tmp_name']
);
}
}
if (count($files)) {
// upload files to Rackspace Cloud Files container
$result = $container->uploadObjects($files);
}
}
Agora você seus arquivos irão manter seus nomes existentes quando eles acabam no recipiente, e você pode obter o caminho URL pública para o seu direito recipiente de dentro do portal Rackspace Cloud.
Eu só tenho feito com algo semelhante. Pensei em adicionar meus resultados para este post.
Primeiro, coloque o pacote CloudFiles em sua aplicação / bibliotecas diretório: https://github.com/rackspace/php-cloudfiles
Então confira esta classe simples integração. Além disso, coloque no diretório bibliotecas. https://bitbucket.org/modomg/codeigniter-rackspace-cloudfiles
Cheers, Jeff Walters