wetransfer / php-sdk
WeTransfer PHP SDK
Requires
- php: ^5.6|^7.0
- guzzlehttp/guzzle: ^6.3
- ramsey/uuid: ^3.7
- squizlabs/php_codesniffer: ^3.3
Requires (Dev)
- guzzle/plugin-mock: ^3.9
- phpunit/phpunit: ~5.0
- satooshi/php-coveralls: ^2.0
This package is auto-updated.
Last update: 2022-10-16 00:07:56 UTC
README
用于 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