2016-05-14 6 views
-3

私はASP.NET MVC Webシステムでファイルアップロード機能を実行しています。ファイルアップロード機能が動作しているので、次はファイルサイズを確認します。サーバでFileSizeを取得すると常にゼロです

<input type="file" name = "Files" class = "multi" id = "myFile"/> 

メインフォームCreate.aspx(2048B以下)

<asp:Content ID="Content4" ContentPlaceHolderID="ContentCph" runat="server"> 
<script type="text/javascript"> 
    $(document).on('click', '#btnCreateDocument', function() { 
     $('#btnCreateDocument').attr('disabled', 'disabled');       // prevent resubmit 
     Checksize() 
     document.body.style.cursor = 'wait'; 
    }); 
    function Checksize() { 

     alert(document.getElementById("myFile").tagName); 
     var k = document.getElementById("myFile").files[0].size; 
     alert("file size in KB " + k/1024); 
      } 

</script> 
    <% Using (Html.BeginForm("Create", "GEDocument", FormMethod.Post, New With {.enctype = "multipart/form-data", .id = "form"}))%> 
    <input type="submit" name="Save" value="<%= Detail.Save %>" id="btnCreateDocument" /> 
    <div id="Div1"> 
     <% Html.RenderPartial("GEDocumentInfoForm", Model) %> 
    </div> 
    <% End Using%>   
</asp:Content> 

ファイルサイズの検証ました:

接続コードに 部分的な形GEDocumentInfoForm.ascxを参照してください。ローカルホストで正常に動作します。だから、私はそれを公開し、開発サーバーに展開しました。私はそれを実行すると、何とか私の検証を通過することができます。 Webブラウザのデバッグモードをチェックインした後、ファイルサイズは0を返します。

var k = document.getElementById("myFile").files[0].size; 

私は、誰もが前に同様の問題を打つかどうかを確認するためのソリューションを検索しようとしました。最終的に、私はサーバの認証を私のコントローラに使用する必要があります。

Dim fileZs As HttpFileCollectionBase = Request.Files 
    For z As Integer = 0 To (fileZs.Count - 1) 
     Dim file As HttpPostedFileBase = fileZs(z) 

     If Not IsNothing(file) AndAlso (file.ContentLength/1024) > 2048 Then 
      errors.Concat(New RuleViolation(Message.EmailMustHaveValue, "SelectedToEmails")) 
     End If 
    Next 

のWeb.Configは、私は、サーバーの検証はユーザーフレンドリーではないと思われる

<system.web> 
    <httpRuntime maxRequestLength="1048576" /> 
    </system.web> 

を(それが原因長すぎるの最大要求にコントローラにActionFilterAttributeを渡すことができるように設定を追加しました)。 クライアントの認証を使用して、ファイルアップロード機能でファイルサイズを確認すると、誰かが私のような問題に直面した場合、専門家からの回答があることを願っています。

  1. 開発サーバーに公開された後、常に0になるのはなぜですか?
  2. サーバーのセキュリティに関連していますか?私が知っているように、FileNameはC:\ fakePath \ myFileNameとしています。ここには何らかの関係がありますか?
+1

チェック許可をアップロードするフォルダに書き込み権限を持っている必要があるためん。ContentLength

も、チェックですサーバー上のあなたのアップロードフォルダのうち – amirpaia

+0

@amirpaia私は、IIS_IUSERSがinetpubの "APP_Data"フォルダを完全に制御していることを確認しました。 –

+0

ちょうどそれを更新するために私はまだjavascriptのファイルサイズ= 0の根本原因を見つけることができません。 'function Checksize(){ アラート(document.getElementById(" myFile ")。tagName); var k = document.getElementById( "myFile")。files [0] .size; アラート( "KB単位のファイルサイズ+ k/1024)。 }、 '私は検証を"サーバー側の検証 "に変更することにしました。DimファイルAs HttpPostedFileBase = fileZs(z) Not IsNothing(file)AndAlso(file。ContentLength/1024)> 2048 Then \\表示エラーメッセージ 終了 ' –

答えて

0

ここでは、Request.Filesは配列です。ファイルを1つだけ送信する場合は、最初の項目を選択する必要があります。チェックする

右のプロパティは、あなたのフォルダにアップロードされたファイルはアップロード後に存在する場合は、あなたが

[HttpPost] 
public ActionResult Upload() 
{ 
    if (Request.Files.Count > 0) 
    { 
     var file = Request.Files[0]; 

     if (file != null && file.ContentLength > 0) 
     { 
      var fileName = Path.GetFileName(file.FileName); 
      var path = Path.Combine(Server.MapPath("~/Images/"), fileName); 
      file.SaveAs(path); 
     } 
    } 

    //............ 
} 
関連する問題