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:

  1. usuário selecionar um arquivo
  2. clique em enviar algumas informações
  3. o arquivo selecionado será enviado para o servidor rackspace e retornar o local do arquivo.
  4. , em seguida, o local do arquivo junto com outras informações serão salvas no meu banco de dados.
  5. , 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.

Foi útil?

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:

  1. Form uploads de arquivos para -seu servidor -
  2. -seu server calculado o recipiente eo nome do arquivo que o arquivo usará
  3. -seu server carrega o arquivo temporário para arquivos Rackspace

Se você deseja que o arquivo a ser publicamente para download ...

  1. -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.
  2. 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 ....

  1. -seu server autentica com Rackspace e os downloads do arquivo temporariamente
  2. -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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top