Hướng dẫn ankitpokhrel tus php - ankitpokhrel php của bạn

TUSPHP

Hướng dẫn ankitpokhrel tus php - ankitpokhrel php của bạn

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
  • 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ây

Hỗ trợ mở rộng

Hết hạn

Tus-JS-Client

Kế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.

Tên sự kiệnPhái
# .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 bytes
0. 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 bytes
1.

# 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 bytes
2. 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 http://0.0.0.0:8080 và máy chủ có thể được truy cập tại http://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 bytes
4. 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 bytes
5.

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

  1. Cài đặt phpunit và nhà soạn nhạc nếu bạn chưa có.
  2. Cài đặt phụ thuộc

    # nginx.conf
    
    location /files {
        try_files $uri $uri/ /server.php?$query_string;
    }
    5

  3. 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

  4. 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 bytes
6 và
$server->setMaxUploadSize(100000000); // 100 MB in bytes
7 để 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!