9

「作成者」がフォトギャラリーの写真などのファイルをアップロードして、後でウェブサイトの動的コンテンツセクションに含めることができるウェブサイトの管理セクションがあります。HTML自体がmySQLデータベースに保存されている特定のページがあり、ユーザーはckeditorインターフェースを使用してコンテンツを編集できます。

ファイルを適切なディレクトリに保存して後で取得するために利用できるものがあるかどうかを確認しようとしています。または、これをすべて最初から作成する必要があります。また、教訓や注意すべきこと(セキュリティなど)を探します。

4

4 に答える 4

11

私はこれを突き刺します。私たちが行ったのと同様のことを行うアプリケーションがあり、「独自のロール」を実行しました。ユーザーは、アプリケーション インターフェイスを介してファイル (画像、ドキュメントなど) をアップロードできます。これらのファイルには、ユーザー/会社/役割に応じたアクセス許可があります。いくつかのセキュリティ上の懸念を軽減するため、およびその他のいくつかの理由により、以下を実装しました。

  1. Web アプリケーションでは、ユーザーが生成したすべてのコンテンツを格納するために使用される「Assets」フォルダーを作成しました。次に、サブフォルダーを使用してコンテンツ (ロゴ、ファイルなど) をセグメント化します。

  2. web.config では、このフォルダーをブラウザーからアクセスできないように構成しました (App_Data または bin フォルダーのように考えてください)。ポイント#4の詳細):

     <system.webServer>
    <security>
      <requestFiltering>
        <hiddenSegments>
          <add segment="Assets"/>
        </hiddenSegments>
      </requestFiltering>
    </security>
    

  3. ファイルがアップロードされると、ファイルに関する関連情報 (タイプ、サイズ、名前、コメント) がデータベースに保存されます。これにより、ロールとユーザーのセキュリティ情報をファイルに関連付けることもできます。

  4. ファイルを取得するために、要求されたファイル名とユーザー情報を受け取り (ログインする必要があるため)、Assets フォルダーからファイルを返す一連のアクションを備えたコントローラーを実装しました。エンド ユーザーには、すべてのファイルが /Files/Docs/FileID などに保存されているように見えますが、実際には、これはファイル自体に対するフロントエンドの「ゲートキーパー」にすぎません。このコントローラー/アクション メソッドは、承認されていない場合、または不正なファイルを要求した場合に 404 を返します。ファイルの命名については、GUID を生成し、ファイルに「GUID.relevantExtension」という名前を付けます (存在しないことを確認します)。

学んだ教訓などについては、特にユーザーがコンテンツを共有していない場合は、ファイルを直接公開しないことが最大のポイントだと思います。また、これはおそらく個人的な好みであり、注意しないと戦争を開始する可能性があります.ページングとキャッシュのパフォーマンスに問題が発生するように思われるため、データベースにファイルを保存することはあまり得意ではありません(SQL 2008ファイル列についても話していません)。お役に立てれば!

編集-これを行うことに関する別の考え、VSから公開するときは注意してください。これらのアップロードされたファイルはソリューションの一部ではありません。アップロード タイプの公開を削除すると、ユーザー ファイルがワックス化されます。ただの注意事項(そこにいました:/)

于 2011-09-26T19:41:11.723 に答える
0

このタイプの CMS Web サイト用の画像サイズ変更ライブラリは、こちらから入手できます。

于 2011-09-29T04:51:59.460 に答える
0

I think you'll end up with "just write this all from scratch".

For me I've "Files" folder and then i make subfolders for each user and if there are a lot of types i create in this UserFolder sub folders for each type of data.

In my DB i just store the "Paths" to get these files.

于 2011-08-27T21:05:11.600 に答える
0

enctype が multipart/form-data のフォームを作成すると、Controller で HttpPostedFileBase を受け取ることができます。

ビューで:

<form action="/MyController/MyAction/" method="post" enctype="multipart/form-data">

コントローラーで:

public ActionResult MyAction(HttpPostedFileBase httpPostedFileBase) { // Your code here. }

httpPostedFileBase 引数は、デフォルトのモデル バインダーによってマップされます。

于 2011-09-21T17:05:10.003 に答える