91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP中使用TUS協議來實現大文件斷點續傳的方法

發布時間:2020-09-04 10:13:54 來源:億速云 閱讀:148 作者:小新 欄目:編程語言

PHP中使用TUS協議來實現大文件斷點續傳的方法?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!

                                                       

你是否曾經為大文件上傳而苦惱?如果文件上傳的過程中,因為某種原因中斷了,是否可以從中斷的位置繼續上傳,而不用重新上傳整個文件?如果你有這樣的困惑,那么請繼續閱讀下面的內容。

在現代網站應用中,上傳文件是非常常見的。在任何語言中,通過使用一些工具,都可以實現文件上傳的功能。但是,如果處理大文件上傳的需求,還是有點麻煩的。

假如你此時正在上傳一個很大的文件,大約一個小時過去了,進度是 90%。突然斷網了或者瀏覽器崩潰了,上傳的程序退出,你要再全部重新來過。真的很不爽,對不對?還有更讓人郁悶的是,如果你的網速很慢,那么,無論你重來多少次,你都不可能上傳成功。

PHP中使用TUS協議來實現大文件斷點續傳的方法

在 PHP 中,我們可以嘗試利用 tus 協議的斷點續傳功能來解決這個問題。

什么是 tus?

Tus 是一個基于 HTTP 的  文件斷點續傳開放協議。 斷點續傳的意思是不管是用戶自行中斷,還是由于網絡等原因的意外中斷,都可以從中斷的地方繼續上傳,而不用重新開始。

Tus 協議是在 2017年5月被 Vimeo 采用的。

為什么用 tus?

引用 Vimeo 的博客:

我們之所以決定用 tus,是因為它能以簡潔開放的形式,將文件上傳的過程標準化。這種標準化有利于 API 的開發者更加專注于應用本身的邏輯,而非文件上傳的過程。

使用這種方式上傳的另一個好處是,你可以在筆記本上開始上傳文件,然后又轉到手機或者其他設備繼續上傳同一個文件,這可以極大地提升用戶體驗。

PHP中使用TUS協議來實現大文件斷點續傳的方法

圖片: Tus 大致的工作流程

開始

第一步,加載依賴。

$ composer require ankitpokhrel/tus-php

tus-php 是用于 tus 斷點續傳協議 v1.0.0 的一個的純 PHP 框架,完美實現了 服務端與客戶端的交互 。

更新: 現在 Vimeo 官方 PHP 庫 的 v3 用的是 TusPHP。

創建一個處理請求的服務端

你可以像下面這樣創建一個服務端.

// server.php

$server   = new \TusPhp\Tus\Server('redis');
$response = $server->serve();

$response->send();

exit(0); // 退出當前 PHP 進程

你需要配置你的服務器以便能對特定的終端進行響應. 如果使用 Nginx 的話你可以像下面這樣配置:

# nginx.conf

location /files {
    try_files $uri $uri/ /path/to/server.php?$query_string;
}

假設我們服務端的 URL 是 http://server.tus.local. 因此, 基于我們上面的 Nginx 配置,我們可以通過 http://server.tus.local/files. 來訪問到我們的 tus 終端.

基于 RESTful 風格的端點配置:

# 獲取有關服務器目前配置的信息\
OPTIONS /files

# 檢查上傳的文件是否合法\
HEAD /files/{upload-key}

# 創建\
POST /files

# 修改\
PATCH /files/{upload-key}

# 刪除\
DELETE /files/{upload-key}

查看 協議細則 獲取更多關于路由的信息。

如果你是用類似于 Laravel 的框架,那么你就不需要在配置文件里定義這些了, 可以直接定義路由來訪問 tus 的基礎端點。我們會在另外的教程里介紹相關細節。

使用 tus-php 客戶端處理上傳

服務器到位后,客戶端可以塊的形式上傳文件。 讓我們首先創建一個簡單的HTML表單來獲取用戶的輸入。

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="tus_file" id="tus-file" />
    <input type="submit" value="Upload" />
</form>

提交表單后,我們需要按照幾個步驟來處理上傳。

  1. 創建一個 tus-php 客戶端對象
// Tus client

$client = new \TusPhp\Tus\Client('http://server.tus.local');

上面代碼中的第一個參數是你的tus服務器地址。

2. 使用文件元數據初始化客戶端

為了確保上傳文件的唯一性,我們需要給每個上傳的文件以唯一標識。這樣在文件中斷后續傳的時候,服務器就可以很清晰地辨識出,哪幾個片段是屬于同一個文件得。這個標識碼可以自己指定,也可以由系統生成。

// 設置標識碼和文件元數據

$client->setKey($uploadKey)
    ->file($_FILES['tus_file']['tmp_name'], 'your file name');

如果不想指定標識碼,可以這樣寫,由系統會自動生成:

$client->file($_FILES['tus_file']['tmp_name'], 'your file name');

$uploadKey = $client->getKey(); // Unique upload key

3. 分塊上傳文件

// $chunkSize 是以字節為單位的,例如 5000000 等于 5 MB

$bytesUploaded = $client->upload($chunkSize);

當你想要續傳下一塊的時候,就可以帶上同樣的標識碼參數來續傳。

// 在下一個請求中續傳文件

$bytesUploaded = $client->setKey($uploadKey)->upload($chunkSize);

文件全部上傳完成后,默認情況下,服務器會使用 sha256 來校驗文件總和,以確保不會有丟失的文件。

使用 tus-js-client 客戶端處理文件上傳

tus 協議的團隊還開發了一個模塊化的文件上傳插件  Uppy。這個插件可以在官方 tus-js-client 和 tus-php 服務器之間建立連接。也就是說我們可以使用 php 配合 js 來實現文件上傳了。

uppy.use(Tus, {
  endpoint: 'https://server.tus.local/files/', // 你的 tus 服務器
  resume: true,
  autoRetry: true,
  retryDelays: [0, 1000, 3000, 5000]
})

更多細節可以查看 uppy 的文檔, 這里 還有些例子可以供你參考。

分塊上傳

tus-php 服務器支持 concatenation 擴展,可以把多次上傳的文件合為一個文件。因此,我們可以在客戶端支持并行上傳以及非連續的分塊文件上傳。

使用 tus-php 實現分塊上傳

tus-partial-upload.php

<?php

// 文件唯一標識碼
$uploadKey = uniqid();

$client->setKey($uploadKey)->file('/path/to/file', 'chunk_a.ext');

// 從第 1000  個字節開始上傳 10000 字節
$bytesUploaded = $client->seek(1000)->upload(10000);
$chunkAkey     = $client->getKey();

// 從 第 0 個字節開始上傳 10000 字節
$bytesUploaded = $client->setFileName('chunk_b.ext')->seek(0)->upload(1000);
$chunkBkey     = $client->getKey();

// 從第 11000 個字節  (10000 +  1000) 開始上傳剩余的字節
$bytesUploaded = $client->setFileName('chunk_c.ext')->seek(11000)->upload();
$chunkCkey     = $client->getKey();

// 把分塊上傳的文件組合起來
$client->setFileName('actual_file.ext')->concat($uploadKey, $chunkAkey, $chunkBkey, $chunkCkey);

分塊上傳的完整例子 在這里.

感謝各位的閱讀!看完上述內容,你們對PHP中使用TUS協議來實現大文件斷點續傳的方法大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鸡泽县| 商丘市| 泗水县| 赣榆县| 军事| 和龙市| 东辽县| 镇赉县| 蓝田县| 绥宁县| 仁布县| 遂昌县| 文昌市| 米泉市| 禹城市| 临沭县| 修文县| 宜宾县| 尖扎县| 姚安县| 镇坪县| 陇南市| 聂荣县| 贵南县| 伊吾县| 翁源县| 淄博市| 常熟市| 克什克腾旗| 宿州市| 明水县| 弥勒县| 都昌县| 新竹县| 韶山市| 东城区| 宁德市| 彰化县| 盘山县| 临澧县| 麻栗坡县|