Rackspace 클라우드 파일:PHP를 사용하여 랙스페이스 클라우드 파일에 이미지 업로드

StackOverflow https://stackoverflow.com/questions/2214540

문제

저는 사용자가 프로필 이미지나 이미지 갤러리용 이미지와 같은 이미지를 업로드할 수 있는 프로젝트를 진행하고 있습니다.지금은 모든 이미지를 내 서버에 업로드하고 있습니다.

이제 PHP 스크립트를 사용하여 이 모든 이미지를 Rackspace 클라우드 파일에 직접 업로드하고 싶습니다.예를 들어:

  1. 사용자가 파일을 선택
  2. 몇 가지 정보와 함께 제출을 누르세요.
  3. 선택한 파일이 Rackspace 서버에 업로드되고 파일 위치가 반환됩니다.
  4. 그러면 다른 정보와 함께 파일 위치가 내 데이터베이스에 저장됩니다.
  5. 그런 다음 해당 위치의 파일이나 이미지를 표시하겠습니다.

그럼 내가 정확히 어떻게 이 일을 할 수 있는지 아시나요?

나는 다음을 사용하고 있습니다 :

  • 코드이그나이터 프레임워크
  • 자바스크립트 라이브러리로서의 jQuery

어떤 답변이라도 미리 감사드립니다.

도움이 되었습니까?

해결책

업데이트:아래에 설명하는 방법은 여전히 ​​작동하지만 토큰을 사용하여 직접 파일을 업로드하는 것은 불가능합니다(덕분에 디자이너가이 해당 정보를 위해).이를 수행하는 방법에 대해 자세히 읽을 수 있습니다. 여기.다음과 같은 서비스도 언급하고 싶습니다. 트랜스로드 이제 HTML 양식에 jquery 삽입을 사용하여 이런 종류의 작업을 아주 쉽게 만들 수 있습니다.아래에서 설명하는 방법은 여전히 ​​작동하며 아마도 가장 많은 제어권을 제공할 것입니다.

Rackspace 자격 증명을 양식에 포함시키는 등의 시도 없이는 Rackspace 파일에 직접 파일을 로드할 수 없습니다.이것이 가능하더라도 그것은 좋은 생각이 아닙니다.(즉.사용자는 애플리케이션과 관련이 없는 자격 증명을 사용하여 대규모 콘텐츠를 추가할 수 있습니다.따라서 원하는 것을 얻으려면(본질적으로 파일을 Rackspace에 저장하고 파일 위치를 서버에 저장하는 것) 작업 흐름을 수정해야 합니다.다음과 같아야 합니다.

  1. 양식은 -귀하의 서버-에 파일을 업로드합니다.
  2. -귀하의 서버- 파일이 사용할 컨테이너와 파일 이름을 계산했습니다.
  3. -귀하의 서버- 임시 파일을 랙 공간 파일에 업로드합니다.

파일을 공개적으로 다운로드할 수 있도록 하려면...

  1. -귀하의 서버-는 파일이 CDN을 통해 제공될 수 있도록 하여 사용자가 액세스할 수 있는 파일에 대한 공개 URL을 만듭니다.
  2. 서버가 HTML을 생성하면 CDN URL이 포함되고 사용자는 마술처럼 파일을 가져옵니다.

특정 사용자만 파일을 다운로드할 수 있도록 하려면....

  1. -귀하의 서버- 랙 공간으로 인증하고 임시로 파일을 다운로드합니다.
  2. -귀하의 서버- 귀하의 서버에서 파일과 HTML을 모두 제공합니다.

귀하의 서버가 랙스페이스 클라우드 인스턴스이거나 일반 Rackspace 관리 서버인 경우(또는 적어도 고객 지원팀에서 그렇게 말한 경우) 귀하의 서버와 랙스페이스 파일 간의 대역폭 비용을 지불하지 않습니다.Amazon과 Rackspace 간의 요금을 계산할 때 중요한 사실입니다.

따라서 Rackspace Files를 서버의 대규모 하드 드라이브로 사용하여 액세스를 제어할 수 있거나 대규모 공용 배포 네트워크로 사용할 수 있습니다...그러나 두 경우 모두 원하는 것을 제공하기 위해 단계 순서를 변경해야 할 수도 있습니다.

다음을 살펴보실 수도 있습니다. HTML 양식에서 수집된 파일을 랙스페이스 파일로 업로드하기 위해 PHP를 사용하는 간단한 예.

다른 팁

From 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');
    }

Welcome_message.php :

<form method="post" action="#" enctype="multipart/form-data"s>
<input type="file" name="upload"><br/>
<input type="submit">
</form>

내가 직면 한 문제 :

cacert.pem ~이 파일은 웹 디렉토리에 가야하며 API와 함께 제공됩니다.

pecl에서 fileInfo가 필요할 수 있으며,이를 위해서는 libmagic이 필요할 수 있습니다 (아직없는 경우).

또한 PHP5-CURL 패키지가 필요하며 PHP는 컬 오류를보고하지 않으므로 API를 파고 작동하지 않으면 일부 출력을 추가하십시오.

이 답변의 많은 부분이 오래되었고 궤도의 대답 그 이후로 API에 많은 변화가 있었을 것이라고 생각합니다. 이후 Ftrotter는 이미 설명했습니다 직접 업로드하려고 시도하면 PHP TMP 디렉토리에서 파일을 보내는 방법에 대한 업데이트 된 버전 (PHP 5.3 스타일)을 표시합니다.

먼저 작곡가를 사용하여 이미 API를 설치했다고 가정합니다.

먼저 자동 로더를 포함시킨 다음 추가해야합니다. use 네임 스페이스.

require 'vendor/autoload.php';

use OpenCloud\Rackspace as Rackspace;

그런 다음 단순히 클라이언트 인스턴스를 설정합니다

// 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');

컨테이너가 있으므로 파일 배열을 설정하고 업로드 할 수 있습니다. 빠르고 더러운 방법은 다음과 같습니다.

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);
    }
}

이제 파일은 컨테이너에있을 때 기존 이름을 유지하고 랙 스페이스 클라우드 포털 내에서 컨테이너의 공개 URL 경로를 얻을 수 있습니다.

방금 비슷한 일을했습니다. 이 게시물에 내 결과를 추가 할 것이라고 생각했습니다.

먼저 CloudFiles 패키지를 응용 프로그램/라이브러리 디렉토리에 배치합니다.https://github.com/rackspace/php-cloudfiles

그런 다음이 간단한 통합 클래스를 확인하십시오. 또한 라이브러리 디렉토리에 배치하십시오.https://bitbucket.org/modomg/codeigniter-rackspace-cloudfiles

건배, Jeff Walters

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top