36

<input type="file" id="fileUpload" runat="server">ASP.NETアプリケーションでファイルをアップロードするために使用しています。アップロードのファイルタイプを制限したい(例:.xlsまたは.xlsxファイル拡張子に制限)。

JavaScriptまたはサーバー側の検証はどちらもOKです(ファイルがアップロードされる前にサーバー側の検証が行われる限り、非常に大きなファイルがアップロードされる可能性があるため、実際のファイルがアップロードされる前に検証を行う必要があります) 。

4

15 に答える 15

31

アップロードの前にチェックを実行する必要があるため、オプションが制限されるようです。あなたが得ようとしている最善の方法は、JavaScriptを使用してファイルの拡張子を検証することだと思います。有効な拡張子のハッシュを作成し、アップロードされているファイルの拡張子がハッシュに存在するかどうかを確認できます。

HTML:

<input type="file" name="FILENAME"  size="20" onchange="check_extension(this.value,"upload");"/>
<input type="submit" id="upload" name="upload" value="Attach" disabled="disabled" />

Javascript:

var hash = {
  'xls'  : 1,
  'xlsx' : 1,
};

function check_extension(filename,submitId) {
      var re = /\..+$/;
      var ext = filename.match(re);
      var submitEl = document.getElementById(submitId);
      if (hash[ext]) {
        submitEl.disabled = false;
        return true;
      } else {
        alert("Invalid filename, please select another file");
        submitEl.disabled = true;

        return false;
      }
}
于 2008-09-16T13:34:40.967 に答える
26

正規表現バリデーターを使用するのは非常に簡単です。

<asp:RegularExpressionValidator
id="RegularExpressionValidator1"
runat="server"
ErrorMessage="Only zip file is allowed!"
ValidationExpression ="^.+(.zip|.ZIP)$"
ControlToValidate="FileUpload1"
> </asp:RegularExpressionValidator>

アップロードが許可されているファイル タイプのクライアント側検証

于 2010-07-06T17:59:58.977 に答える
6

私はChrisに同意します.拡張子をチェックすることは、どのように見てもファイルの種類を検証することではありません. Telerik の radUploadはおそらく最良のオプションです。これは、アップロードされるファイルの ContentType プロパティを提供し、既知の MIME タイプと比較できます。以下を確認する必要があります。

アプリケーション/vnd.ms-Excel、

アプリケーション/エクセル、

アプリケーション/x-msexcel

新しい 2k7 フォーマットの場合:

application/vnd.openxmlformatsofficedocument.spreadsheetml.sheet

Telerik は radUpload を個別のコンポーネントとして販売していましたが、現在はコントロール スイートに組み込まれているため、コストが少し高くなりますが、真のタイプを確認する最も簡単な方法です。

于 2008-09-16T14:28:24.550 に答える
6

JavaScript から、onsubmit ハンドラでファイル名を取得できるはずです。したがって、あなたの場合、次のようにする必要があります。

<form onsubmit="if (document.getElementById('fileUpload').value.match(/xls$/) || document.getElementById('fileUpload').value.match(/xlsx$/)) { alert ('Bad file type') ; return false; } else { return true; }">...</form>
于 2008-09-16T13:09:28.733 に答える
4

アップロード コントロールで正規表現バリデーターを使用できます。

  <asp:RegularExpressionValidator id="FileUpLoadValidator" runat="server" ErrorMessage="Upload Excel files only." ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.xls|.XLS|.xlsx|.XLSX)$" ControlToValidate="fileUpload"> </asp:RegularExpressionValidator>

input タグの accept 属性もあります。

<input type="file" accept="application/msexcel" id="fileUpload" runat="server">

しかし、これを試したときはあまり成功しませんでした(FF3とIE7で)

于 2008-09-16T13:12:56.450 に答える
3

何人かが言及したように、Javascript は進むべき道です。ここでの「検証」はファイル拡張子のみによるものであり、ファイルが実際の Excel スプレッドシートであるかどうかは検証されないことに注意してください。

于 2008-09-16T14:03:30.120 に答える
3

ファイルのコンテンツタイプを確認することを提案するkd7の返信に基づいて、ラッパーメソッドを次に示します。

private bool FileIsValid(FileUpload fileUpload)
{
    if (!fileUpload.HasFile)
    {
        return false;
    }
    if (fileUpload.PostedFile.ContentType == "application/vnd.ms-excel" ||
        fileUpload.PostedFile.ContentType == "application/excel" ||
        fileUpload.PostedFile.ContentType == "application/x-msexcel" ||
        fileUpload.PostedFile.ContentType == "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" //this is xlsx format
        )
        return true;

    return false;
}

アップロードするファイルが .xls または .xlsx の場合は true を返します

于 2013-07-04T11:01:57.210 に答える
2

サーバー側で常にファイル拡張子を確認して、.aspx、.asp などの悪意のあるファイルを誰もアップロードできないようにしてください。

于 2008-12-01T11:23:47.210 に答える
1

別のオプションとして、受け入れ可能な MIME タイプを定義する HTML ファイル入力の「accept」属性を使用できますか。

定義はこちら

于 2010-02-18T09:59:16.387 に答える
1

標準の Asp.Net コントロールを避けて、Brettle Development の NeadUpload コンポーネントを使用してください: http://www.brettle.com/neatupload

より高速で使いやすく、構成ファイルの maxRequestLength パラメータを気にする必要がなく、統合も非常に簡単です。

于 2008-09-16T13:41:11.873 に答える
1

ポストバック中にファイルが送信 (アップロード) されるため、ポストバック時にサーバー側で実行することはできません。

JavaScriptを使用してクライアント上で実行できると思います。個人的には、Telerik の radUploadというサードパーティ コンポーネントを使用しています。クライアント側とサーバー側の優れた API を備えており、大きなファイルのアップロードの進行状況バーを提供します。

オープンソースのソリューションも利用できると確信しています。

于 2008-09-16T13:06:44.060 に答える
1

これを行うにはさまざまな方法があると思います。私はaspに慣れていないので、特定のファイルタイプをチェックするためのヒントしか提供できません:

1) 安全な方法: 渡したいファイルタイプのヘッダーに関する詳細情報を取得します。アップロードされたファイルを解析し、ヘッダーを比較します

2)簡単な方法:ファイルの名前を2つに分割します->ファイルの名前とファイルの末尾。ファイルの末尾を確認し、アップロードを許可するファイルタイプと比較します

それが役に立てば幸い :)

于 2008-09-16T13:18:46.077 に答える
0

サーバー側はファイルが既にアップロードされていることを意味するため、唯一のオプションはクライアント側の検証のようです。また、MIME タイプは通常、ファイル拡張子によって決まります。

jQuery などの JavaScript フレームワークを使用して、フォームの onsubmit イベントをオーバーロードします。次に、拡張子を確認します。これにより、ほとんどの試行が制限されます。ただし、画像を拡張子 XLS に変更すると、問題が発生します。

これがオプションかどうかはわかりませんが、Silverlight や Flash などを使用してアップロードすると、クライアント側でより多くの制御が可能になります。アップロード プロセスにこれらのテクノロジのいずれかを使用することを検討してください。

于 2008-09-16T13:09:08.953 に答える