TUSPHP
Tải lên tệp có thể tiếp tục trong PHP bằng TUS Resumeable Upload Protocol v1.0.0
TUS là một giao thức dựa trên HTTP để tải lên tệp có thể nối lại. Có thể tiếp tục có nghĩa là bạn có thể tiếp tục nơi bạn rời đi mà không tải lại toàn bộ dữ liệu trong trường hợp gián đoạn. Một sự gián đoạn có thể xảy ra một cách sẵn sàng nếu người dùng muốn tạm dừng hoặc tình cờ trong trường hợp phát hành mạng hoặc ngừng hoạt động máy chủ. is a HTTP based protocol for resumable file uploads. Resumable means you can carry on where you left off without re-uploading whole data again in case of any interruptions. An interruption may happen willingly if the user wants to pause, or by accident in case of a network issue or server outage.
Mục lục
- Cài đặt
- Cách sử dụng
- Người phục vụ
- Nginx
- Apache
- Khách hàng
- Thư viện khách hàng của bên thứ ba
- Nhà cung cấp đám mây
- Người phục vụ
- Hỗ trợ mở rộng
- Hết hạn
- Kết nối
- Sự kiện
- Trả lời một sự kiện
- Phần mềm trung gian
- Tạo một phần mềm trung gian
- Thêm một phần mềm trung gian
- Bỏ qua một phần mềm trung gian
- Thiết lập môi trường phát triển và/hoặc chạy các ví dụ tại địa phương
- Docker
- Đóng góp
- Câu hỏi về dự án này?
- Những người ủng hộ
Cài đặt
Cách sử dụng
$ composer require ankitpokhrel/tus-php
// Use v1 for php7.1, Symfony 3 or 4.
$ composer require ankitpokhrel/tus-php:^1.2
Cách sử dụng
Người phục vụ |
Người phục vụ
Nginx
// server.php // Either redis, file or apcu. Leave empty for file based cache. $server = new \TusPhp\Tus\Server['redis']; $response = $server->serve[]; $response->send[]; exit[0]; // Exit from current PHP process.
Apache
Khách hàng
Nginx# nginx.conf location /files { try_files $uri $uri/ /server.php?$query_string; }
Apache
Khách hàng
location ~ \.php$ { # ... fastcgi_request_buffering off; # Disable request buffering # ... }
Thư viện khách hàng của bên thứ ba
Apache# .htaccess RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^files/?[.*]?$ /server.php?$1 [QSA,L]
Khách hàng
$server->setMaxUploadSize[100000000]; // 100 MB in bytes
Thư viện khách hàng của bên thứ ba
\TusPhp\Config::set['']; $server = new \TusPhp\Tus\Server['redis'];
Nhà cung cấp đám mây
Khách hàng
Thư viện khách hàng của bên thứ ba
$client = new \TusPhp\Tus\Client[$baseUrl]; // Key is mandatory. $key = 'your unique key'; $client->setKey[$key]->file['/path/to/file', 'filename.ext']; // Create and upload a chunk of 1MB $bytesUploaded = $client->upload[1000000]; // Resume, $bytesUploaded = 2MB $bytesUploaded = $client->upload[1000000]; // To upload whole file, skip length param $client->file['/path/to/file', 'filename.ext']->upload[];
Nhà cung cấp đám mây
$offset = $client->getOffset[]; // 2000000 bytes or 2MB
Hỗ trợ mở rộng
Hết hạn
$client->setApiPath['/api'];
Kết nối
// server.php // Either redis, file or apcu. Leave empty for file based cache. $server = new \TusPhp\Tus\Server['redis']; $response = $server->serve[]; $response->send[]; exit[0]; // Exit from current PHP process.0
Thư viện khách hàng của bên thứ ba
Nhà cung cấp đám mâyHỗ trợ mở rộng
Hết hạn
Tus-JS-ClientKết nối
Sự kiện
Nhà cung cấp đám mây
Hỗ trợ mở rộng
// server.php // Either redis, file or apcu. Leave empty for file based cache. $server = new \TusPhp\Tus\Server['redis']; $response = $server->serve[]; $response->send[]; exit[0]; // Exit from current PHP process.3
Hết hạn
- Kết nối
- Sự kiện
- Trả lời một sự kiện
- Phần mềm trung gian
- Tạo một phần mềm trung gian
Hết hạn
Kết nối
// server.php // Either redis, file or apcu. Leave empty for file based cache. $server = new \TusPhp\Tus\Server['redis']; $response = $server->serve[]; $response->send[]; exit[0]; // Exit from current PHP process.4
Bạn có thể sử dụng tùy chọn ____42 để ghi đè REDI mặc định hoặc cấu hình tệp.
// server.php // Either redis, file or apcu. Leave empty for file based cache. $server = new \TusPhp\Tus\Server['redis']; $response = $server->serve[]; $response->send[]; exit[0]; // Exit from current PHP process.5
Kết nối
Máy chủ có khả năng kết hợp nhiều tải lên vào một ứng dụng cho phép các máy khách thực hiện tải lên song song và tải lên các khối không liên tục.
// server.php // Either redis, file or apcu. Leave empty for file based cache. $server = new \TusPhp\Tus\Server['redis']; $response = $server->serve[]; $response->send[]; exit[0]; // Exit from current PHP process.6
Ngoài ra, máy chủ sẽ xác minh tổng kiểm tra đối với tệp được hợp nhất để đảm bảo rằng tệp không bị hỏng.
Sự kiện
Thông thường, bạn có thể muốn thực hiện một số thao tác sau khi tải lên hoàn tất hoặc tạo. Ví dụ: bạn có thể muốn cắt hình ảnh sau khi tải lên hoặc chuyển một tệp và gửi email cho người dùng của bạn. Bạn có thể sử dụng các sự kiện TUS cho các hoạt động này. Các sự kiện sau được gửi bởi máy chủ trong các điểm thực thi khác nhau.
# .htaccess RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^files/?[.*]?$ /server.php?$1 [QSA,L]3 | Sau khi tải lên được tạo trong yêu cầu # .htaccess RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^files/?[.*]?$ /server.php?$1 [QSA,L]4. |
# .htaccess RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^files/?[.*]?$ /server.php?$1 [QSA,L]5 | Sau khi một đoạn được tải lên trong yêu cầu # .htaccess RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^files/?[.*]?$ /server.php?$1 [QSA,L]6. |
# .htaccess RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^files/?[.*]?$ /server.php?$1 [QSA,L]7 | Sau khi tải lên hoàn tất và xác minh tổng kiểm tra được thực hiện. |
# .htaccess RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^files/?[.*]?$ /server.php?$1 [QSA,L]8 | Sau khi tất cả các tải lên một phần được hợp nhất trong yêu cầu nối. |
Trả lời một sự kiện
Để nghe một sự kiện, bạn chỉ cần đính kèm người nghe với tên sự kiện. Một ví dụ
# .htaccess RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^files/?[.*]?$ /server.php?$1 [QSA,L]9 được tạo và truyền cho tất cả người nghe.
// server.php // Either redis, file or apcu. Leave empty for file based cache. $server = new \TusPhp\Tus\Server['redis']; $response = $server->serve[]; $response->send[]; exit[0]; // Exit from current PHP process.7
Hoặc, bạn cũng có thể liên kết một số phương thức của một lớp tùy chỉnh.
// server.php // Either redis, file or apcu. Leave empty for file based cache. $server = new \TusPhp\Tus\Server['redis']; $response = $server->serve[]; $response->send[]; exit[0]; // Exit from current PHP process.8
Phần mềm trung gian
Bạn có thể thao tác yêu cầu và phản hồi của máy chủ bằng phần mềm trung gian. Middleware có thể được sử dụng để chạy một đoạn mã trước khi máy chủ gọi phương thức xử lý thực tế. Bạn có thể sử dụng phần mềm trung gian để xác thực yêu cầu, xử lý CORS, danh sách trắng/danh sách đen một IP, v.v.
Tạo một phần mềm trung gian
Để tạo phần mềm trung gian, bạn cần triển khai giao diện
$server->setMaxUploadSize[100000000]; // 100 MB in bytes0. Phương pháp xử lý cung cấp đối tượng yêu cầu và phản hồi để bạn thao tác.
// server.php // Either redis, file or apcu. Leave empty for file based cache. $server = new \TusPhp\Tus\Server['redis']; $response = $server->serve[]; $response->send[]; exit[0]; // Exit from current PHP process.9
Thêm một phần mềm trung gian
Để thêm một phần mềm trung gian, hãy lấy đối tượng phần mềm trung gian từ máy chủ và chỉ cần truyền các lớp phần mềm trung gian.
# nginx.conf location /files { try_files $uri $uri/ /server.php?$query_string; }0
Hoặc, bạn cũng có thể vượt qua các đối tượng lớp trung gian.
# nginx.conf location /files { try_files $uri $uri/ /server.php?$query_string; }1
Bỏ qua một phần mềm trung gian
Nếu bạn muốn bỏ qua hoặc bỏ qua bất kỳ phần mềm trung gian nào, bạn có thể làm như vậy bằng cách sử dụng phương thức
$server->setMaxUploadSize[100000000]; // 100 MB in bytes1.
# nginx.conf location /files { try_files $uri $uri/ /server.php?$query_string; }2
Thiết lập môi trường phát triển và/hoặc chạy các ví dụ tại địa phương
Một ví dụ dựa trên AJAX cho việc triển khai này có thể được tìm thấy trong thư mục
$server->setMaxUploadSize[100000000]; // 100 MB in bytes2. Bạn có thể xây dựng và chạy nó bằng Docker như được mô tả dưới đây.
Docker
Hãy chắc chắn rằng Docker và Docker-Compose được cài đặt trong hệ thống của bạn. Sau đó, chạy tập lệnh Docker từ Project Root.
# nginx.conf location /files { try_files $uri $uri/ /server.php?$query_string; }3
Bây giờ, máy khách có thể được truy cập tại //0.0.0.0:8080 và máy chủ có thể được truy cập tại //0.0.0.0:8081. Điểm cuối API mặc định được đặt thành ____ và các tệp được tải lên có thể được tìm thấy bên trong thư mục
$server->setMaxUploadSize[100000000]; // 100 MB in bytes4. Tất cả các cấu hình Docker có thể được tìm thấy trong thư mục
$server->setMaxUploadSize[100000000]; // 100 MB in bytes5.
Nếu bạn muốn một khởi đầu mới thì bạn có thể sử dụng các lệnh sau. Nó sẽ xóa và tạo lại tất cả các container, hình ảnh và thư mục tải lên.
# nginx.conf location /files { try_files $uri $uri/ /server.php?$query_string; }4
Chúng tôi cũng có một số tập lệnh tiện ích sẽ làm giảm trải nghiệm phát triển địa phương của bạn. Xem Makefile để biết danh sách tất cả các lệnh có sẵn. Nếu bạn không sử dụng Make, thì bạn có thể sử dụng các tập lệnh shell có sẵn ở đây.
Đóng góp
- Cài đặt phpunit và nhà soạn nhạc nếu bạn chưa có.
- Cài đặt phụ thuộc
# nginx.conf location /files { try_files $uri $uri/ /server.php?$query_string; }
5 - Chạy các bài kiểm tra với phpunit
# nginx.conf location /files { try_files $uri $uri/ /server.php?$query_string; }
6 - Xác nhận các thay đổi so với các tiêu chuẩn mã hóa PSR2
# nginx.conf location /files { try_files $uri $uri/ /server.php?$query_string; }
7
Bạn có thể sử dụng
$server->setMaxUploadSize[100000000]; // 100 MB in bytes6 và
$server->setMaxUploadSize[100000000]; // 100 MB in bytes7 để bật và tắt XDebug bên trong thùng chứa.
Câu hỏi về dự án này?
Xin vui lòng báo cáo bất kỳ lỗi tìm thấy. Yêu cầu kéo, vấn đề và khuyến nghị dự án được chào đón nhiều hơn!