wetransfer/php-sdk

此包已被 放弃 且不再维护。没有推荐替代包。

WeTransfer PHP SDK

0.3.0 2018-08-08 08:24 UTC

This package is auto-updated.

Last update: 2022-10-16 00:07:56 UTC


README

Build Status Latest Stable Version License Coverage Status

用于 WeTransfer 公共 API 的 PHP SDK

安装

系统需求

  • PHP 5.6.4 或更高版本
  • Composer

可以通过 Composer 安装 WeTransfer PHP SDK。如果 Composer 已全局安装,请在项目目录中运行以下命令

$ composer require wetransfer/php-sdk

或者如果Composer已在项目本地安装,请运行以下命令

$ php composer.phar require wetransfer/php-sdk

使用

为了能够使用 SDK 并访问我们的公共 API,您必须提供一个 API 密钥,该密钥可在我们的 开发者门户 获取。

您可以在此处找到完整的示例代码 这里

如果您在项目中没有使用自动类加载器,您需要在每个 PHP 脚本开始时手动加载 SDK,如下所示

<?php
// This can be your index.php, for example.
require __DIR__ . '/vendor/autoload.php';

// At this point, you can start using the SDK. Keep reading!

首先,客户端需要使用从 WeTransfer 开发者那里获得的 API 密钥进行配置。我们建议将 API 密钥设置为环境变量,但这将取决于您的应用程序是如何配置的。

// Read the API Key value from the environment, using 
$wtClient = WeTransfer\Client::setApiKey(getenv('WT_API_KEY'));

// Or include it directly on your source code.
// Be careful not sharing your API key, it is suppose to be private.
$WT_API_KEY='your private key goes here';
$wtClient = WeTransfer\Client::setApiKey($WT_API_KEY);

传输

可以创建带或不带项目的传输。一旦传输创建完成,就可以随时添加项目。使用纯 PHP,您将从这个变量中读取 $_POST,很可能是

$name = $_POST['transfer_name'];
$description = $_POST['transfer_description'];

$transfer = WeTransfer\Transfer::create($name, $description);

或者如果您正在使用像 Symfony 这样的框架,您将访问请求对象

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\JsonResponse;

class SampleController extends Controller
{
    public function indexAction(Request $request) {
        $name = $request->request->get('transfer_name');
        $description = $request->request->get('transfer_description');
        $transfer = WeTransfer\Transfer::create($name, $description);

        // You will need to save the transfer->getId() value to access the transfer in the future.
        // Use a data base, the session or return it to the client
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->persist($transfer);
        $entityManager->flush();

        return new JsonResponse($transfer);
    }

}

向传输添加项目

一旦创建了一个传输,您就可以向其中添加项目(文件或链接)。如果您要向传输中添加文件,文件在此点不会上传,而是在下一个步骤中上传。

WeTransfer\Transfer::addLinks($transfer, [
  [
    'url' => 'https://en.wikipedia.org/wiki/Japan',
    'meta' => [
      'title' => 'Japan'
    ]
  ]
]);

WeTransfer\Transfer::addFiles($transfer, [
  [
    'filename' => 'Japan-01.jpg',
    'filesize' => 13370099
  ]
]);

每个添加到传输的项目都会更新 $transfer 对象。对于文件,该对象将用于上传对应的文件到传输,正如下一节所解释的。

上传文件

一旦文件被添加到传输中,下一步就是上传文件或文件。您必须提供要上传的文件的内容作为引用(使用 fopen 函数),我们将不会为您读取文件。文件的内容将被分割并分块(每块 5MB)上传到我们的 S3 存储桶。

foreach($transfer->getFiles() as $file) {
  WeTransfer\File::upload($file, fopen(realpath('./path/to/your/files.jpg'), 'r'));
}

请求上传 URL

前几步在直接访问文件的环境下工作得很好,例如 CLI 工具。在 Web 环境中,我们不希望将文件上传到服务器,然后再上传到 S3,而是希望直接从客户端上传。 WeTransfer\File::createUploadUrl 方法将为指定的部分创建必要的上传 URL。

// This code lives on the browser
async function uploadFile(item, content) {
  const MAX_CHUNK_SIZE = 6 * 1024 * 1024;
  for (let partNumber = 0; partNumber < item.meta.multipart_parts; partNumber++) {
    const chunkStart = partNumber * MAX_CHUNK_SIZE;
    const chunkEnd = (partNumber + 1) * MAX_CHUNK_SIZE;

    const multipartItem = await fetch('https://yourserver.com/create-upload-url', {
      method: 'POST',
      body: JSON.stringify({
        file_id: item.id.
        multipart_upload_id: item.meta.multipart_upload_id,
        part_number: partNumber
      })
    });
    
    await fetch(multipartItem.upload_url, {
      method: 'PUT',
      body: content.slice(chunkStart, chunkEnd)
    });
  }
};
// src/Controller/LuckyController.php
namespace App\Controller;

use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;

class FilesController
{
    /**
     * @Route("/create-upload-url", name="app_create_upload_url", methods={"POST"})
     */
    public function createUploadUrl(Request $request)
    {
        $data = json_decode(
            $request->getContent(),
            true
        );

        $uploadUrl = WeTransfer\File::createUploadUrl(
            $data['file_id'],
            $data['multipart_upload_id'],
            $data['part_number']
        );

        return new JsonResponse(
            $uploadUrl,
            JsonResponse::HTTP_CREATED
        );
    }
}

开发

获取Composer。按照官方Composer页面中定义的说明操作,或者如果你使用homebrew,只需运行

$ brew install composer

安装项目依赖

$ composer install

运行测试套件

$ ./vendor/bin/phpunit

请遵循PSR-2编码规范。在推送代码之前,运行以下命令

$ ./vendor/bin/phpcs --standard=PSR2 -n src tests

# This command will automatically fix existing issues
$ ./vendor/bin/phpcbf --standard=PSR2 -n src tests