新しいクラウドストレージ機能:ファイルダウンロードリンクの作成

ストレージ共有

そのため、クラウドストレージにダウンロードリンクの作成という新しい機能が登場しました。 このようなリンクを作成することにより、サードパーティのユーザーにファイルをアップロードできるように、完全に無料でサードパーティのユーザーに送信できます。 このユーザーがリポジトリにアカウントを持つ必要はありません。

この関数は、次のようなさまざまなタスクを解決するのに役立ちます。


背景


私は最近、エルブルス山の登山に参加しました。 私のグループを含むグループのすべてのメンバーは、カメラを持っていました。 多くの興味深く、美しい写真が撮られました、そして旅行の後、質問が起こりました:すべての参加者にそれらをアクセス可能にする方法?

誰かがすべての写真をVKontakteまたはFacebook、Mail.Ruの誰か、他のファイル共有の誰かにアップロードすることを提案しました...しかし、上記のサービスはすべて私たちに適合しませんでした。まず、ダウンロードファイルのサイズに制限があります。 次に、グループのすべてのメンバーがこれらのサービスに登録されたわけではありません。

すべての人にシンプルで便利なソリューションを提案しました。Selectelクラウドストレージにパブリックコンテナーを作成し、ファイル一覧オプションをオンにしました。 次に、クリックして、誰もが自分の写真をコンテナにアップロードしたり、他の参加者が撮影した写真をダウンロードしたりできるリンクを作成しました。 同時に、グループメンバーは誰もリポジトリにアカウントを作成する必要がありませんでした。 そのため、クラウドストレージの新機能がテストされました-サードパーティのユーザーがファイルをダウンロードするためのリンクを作成します。 エルブルス山の私の登山家はそれを「素晴らしい」と評価しました。

今日、この機能を幅広いユーザーに紹介します。 すべてのユーザーが感謝することを願っています。

リンク作成


新しい関数がどのように機能するかの簡単な例を見てみましょう。 ファイルをダウンロードするための特別なコンテナを作成し、たとえばshareという名前を付けます。 次に、コンテナメニューを開き、「ファイルをダウンロードするためのリンク」項目を選択します。

uploadlink-001

リンク設定ウィンドウが開きます:

uploadlink-002
このダイアログボックスでは、次のパラメーターを設定できます(詳細については、以下で説明します)。

[リンクの作成]ボタンをクリックします。 コピーして他のユーザーに送信できるリンクを含むダイアログボックスが表示されます。 コンテナまたはフォルダごとに、設定のさまざまな組み合わせでダウンロードリンクを無制限に作成できます。

ダウンロードページ


あなたからリンクを受け取ってブラウザで開くユーザーには、次のページが表示されます。



このページは3つのファイルの同時並行ダウンロードをサポートし、これにより、ダウンロードプロセスが大幅に加速されます。



ファイルを削除する必要がある場合は、ダウンロードが完了してから10分以内に削除できます。

リンク設定


リンクの種類


前述のように、リンクを作成するときは、そのタイプを選択する必要があります。 さまざまなユースケースに合わせていくつかのタイプのリンクを提供しています。 各タイプのリンクをさらに詳しく考えてみましょう。

簡単ダウンロード


1人以上のユーザーからファイルを受信する必要がある状況に適しています。 ファイルは指定されたコンテナーまたはフォルダーにアップロードされ、Webパネルまたはその他の方法でファイルにアクセスできます。

ファイル名にロード時間を追加する


このオプションを選択すると、ダウンロードした日付と時刻がダウンロードしたファイルの名前に追加されます。 たとえば、ファイルmyphoto.jpgをアップロードすると、myphoto_20130830_12h43m53s.jpgとして保存されます。
これは、バックアップを保存する場合や、ダウンロードリンクへのアクセスが多数のユーザーに提供され、ダウンロードファイルの名前に一致するものを除外する必要がある場合に役立ちます。

ファイル名に一意の識別子を追加する


このオプションを選択すると、一意の識別子がファイル名に追加されます。 たとえば、ダウンロード後のファイルmyphoto.jpgはmyphoto_cmrsm2ks.jpgに名前が変更されます。
このタイプのリンクは、ユーザーコンテンツをサイトにアップロードする実装に適しています(この場合、元のファイル名を無視するオプションを含めることも有用です):ユーザーによって指定された名前は拒否され、新しいファイル名は一意の識別子に対応します。

一意のフォルダーにダウンロードする


このタイプのリンクを選択すると、各ダウンロードセッション中のファイルは個別のフォルダーに保存されます。 たとえば、ファイルmyphoto.jpgはcmrsm2ksという名前のフォルダーに保存されます。 このファイルをダウンロードした後、ダウンロードページを閉じてから再度閉じて他のファイルをロードすると、それらのファイルは別のフォルダーに保存され、その名前は自動的に生成されます。 次回のダウンロードセッションなどのために別のフォルダーも作成されます。

日付ごとにフォルダーにアップロードする


この操作モードは、バックアップのダウンロードに適しています。 ダウンロードしたファイルは、名前に現在の日付を含むフォルダーに保存されます。 たとえば、ダウンロード後のmysql.dump.bz2アーカイブは2013-08-30 / mysql.dump.bz2として利用可能になります。

時計でフォルダーにアップロードする


通常、このモードは前のモードに似ています。 唯一の違いは、日付に加えて、ダウンロード時間(時間)がフォルダー名に追加されることです。 mysql.dump.bz2アーカイブは2013-08-30_15 / mysql.dump.bz2として利用可能になります。

指定した名前でダウンロードする


このタイプのリンクは、アプリケーションまたはサイトのAPIを介した使用により適しています。
リンクは1回のダウンロードに対してのみ有効であり、ダウンロードされたファイルの名前はリンク自体の名前に変更されます。 たとえば、リンクがxxx.selcdn.ru/container/you_photo.jpgのように見えた場合、ダウンロード後、ファイルはリポジトリでyou_photo.jpgという名前で使用可能になり、リンクは機能しなくなります。

制限時間


ダウンロードリンクを作成するときに、時間制限を設定できます。

uploadlink-004
これは非常に柔軟で便利なオプションです。 まず、リンク自体の持続時間を制限することができます。 指定した期間を過ぎると、サードパーティのユーザーはリポジトリにファイルをアップロードできなくなります。 このような機会は、特定の日付までにインターネット経由でユーザーからドキュメントを受信する必要がある場合(たとえば、会議や競技会の申請を受け付ける場合)に便利です。

次に、ダウンロードしたファイルの保存期間を設定するために使用できます。 ダウンロードリンクを受け取ったユーザーからのファイルが保存される特定の期間を設定できます。 この期間が終了すると、すべてのファイルが自動的に削除されます。 このような機能は、たとえば、バックアップのロードとストレージの整理に役立ちます。

追加機能


開発者向け


リンク管理はAPIを介して実行でき、Openstack Swift APIと互換性があります。 ライブラリを使用してOpenstack Swift APIを操作すると、独自のアプリケーションやサイトから直接リポジトリにファイルをアップロードするためのリンクを簡単に作成および構成できます。

ダウンロードリンクを使用して、サードパーティのサイトからリポジトリにコンテンツをダウンロードする機能を実装できます。
以下に簡単な例を示します。

ファイルアップロードフォーム:
<form id="put-file"> <input id="fileToUpload" type="file" /> <input type="submit" /> </form> 


JavaScriptコード:
 (function() { var $putFile = document.getElementById('put-file'); $putFile.onsubmit = function (event) { var req = new XMLHttsourcequest(); event.sourceventDefault() file = document.getElementById('fileToUpload').files[0] req.open("PUT", "https://xxx.selcdn.ru/containet/sendmefile_link"); req.withCredentials = false; /*    */ req.setRequestHeader("X-Filename", file.name); /*          */ TZ_OFFSET = (new Date).getTimezoneOffset(); req.setRequestHeader("X-Sendmefile-TZ-Offset", TZ_OFFSET); req.send(file); req.onreadystatechange = function () { if(req.readyState === 4 && req.status === 200) alert(req.responseText) } return false; } })() 


システム管理者向け


ダウンロードリンクを作成する機能は、サーバーからストレージにファイルをすばやくダウンロードしたり、バックアップを設定したりするのに役立ちます。

ファイルをダウンロードするには、最初にWebパネルにリンクを作成してから、curlユーティリティを使用してサーバー管理コンソールで次のコマンドを実行する必要があります。

 $ curl -i https://xxx.selcdn.ru/container/upload_link -T path_to/file.name -H "X-Filename: file.name" 

ファイルに保存せずに、名前付きパイプ(パイプ)を介してデータの転送を整理することもできます。

 #      “ ” $ bzip2 bigfile.dat -c | curl -i http://xxx.selcdn.ru/container/upload_link -X PUT -d @- -H "X-Filename: bigfile.dat.bz2" 

別の興味深い機能は、特定のフォルダーからのファイルのマルチスレッドダウンロードです。 suploadユーティリティを使用するよりもはるかに高速です

 #    -P $ find path_to_dir/ -type f | xargs -I "{}" -n1 -P 10 curl http://xxx.selcdn.ru/container/upload_link -i -X PUT -H "X-Filename: {}" -T "{}" 


バックアップ


新しい機能により、バックアップ手順が大幅に簡素化されます。サーバーまたはサイトごとに個別のコンテナを作成する必要がなくなりました。 数が制限されている追加のユーザーを作成する必要はありません。 バックアップを確実にダウンロードして保存するには、パスワードで保護されたリンクを作成し、それに応じて設定するだけです。

バックアップをダウンロードするためのリンクを作成すると、以前はかなりの労力が必要であった多くの問題を解決できます。

1つは、ダウンロードしたバックアップを日付と時刻で並べ替えることです。 ダウンロードされたすべてのファイルが日時に従って自動的にソートまたは名前変更されるようにするには、適切なタイプのリンクを作成するだけです。

第二に、保存期間が終了すると、バックアップが自動的に削除されます。 保管期間は2つの方法で設定できます。厳密に指定された時間とデフォルトの時間を設定します。 2番目のオプションでは、ダウンロードプロセス中に保存期間を変更できます。

ダウンロードリンクを介したバックアップは、データのコピーを含むアーカイブを作成した後、外部コマンドの実行をサポートすることが多い自動バックアップシステムに簡単に統合できます。

あとがき


よくあることですが、正式に発表される数日前にユーザーが新しい機能を利用できるようになりました。 私たちのクライアントの一部は、すでにそれを自分のサービスに「結び付け」ようとしており、すでに彼らからフィードバックを受け取っています。 彼らのレビューで、彼らは私たちにいくつかのコメントと提案を表明しましたが、それらは近い将来考慮されるでしょう。 特に、次のような非常に興味深い願いが表明されました。

すべての読者に新しい機能を試してみてください。 ダウンロードページのテストバージョンへのリンク: http : //23728.selcdn.ru/sendmefile-test/upload (すべてのファイルは1時間保存され、リンク自体は記事の公開日から30日間利用可能になります)。

コメント、提案、提案を歓迎し、今後の作業でそれらを考慮に入れるようにしてください。
Habréの投稿にコメントできない場合は、 ブログにご招待します。

Source: https://habr.com/ru/post/J193016/


All Articles