2016-06-29 1 views
0

で働いていない背景:私はアヤックス+ Struts2のを使用して非同期で大きなファイルをアップロードするためのツールを探しています 、私はサーブレットを使用して同じことを行うことができたが、ときに私が変更strutsアクションを呼び出すロジック。私はstruts2アクションを使用して巨大なファイルをアップロードしようとすると、jqueryから呼び出されないことに気付いた。ajaxForm(options);ポストajaxFormはIE

以下のリンクで指定されたサンプルコードを使用した。 http://www.simplecodestuffs.com/file-upload-with-progress-bar-using-jquery-in-servlet/

以下のjquery関数の呼び出しがアップロード機能に適しているかどうかは誰でも知ることができます。 $("#uploadtest").ajaxForm(options);

巨大なデータがアップロードされると、特定のブラウザでは期待どおりに動作しません。 (つまり、クライアントajax呼び出しが発生しますが、対応するstruts2アクションはバックエンドで呼び出されず、ログはサーバー側で生成されません)。 jquery ajaxformが巨大なファイルをアップロードする際にstruts2のアクションが呼び出されない理由を理解できません(マルチパートアップロード機能)。

jqueryの $("#uploadtest").ajaxForm(options);

JSPスニペット <s:form id="uploadtest" name="uploadform" action="aStrutsAction" method="post" enctype="multipart/form-data">

同様の質問がここに尋ねます。.. FormData in IE8/9

+0

どのように動作しないのですか?他のブラウザでも動作しますか? –

+0

「試しましたが、期待どおりに動作していません」と明記してください。 –

+0

@RomanCありがとうございます。質問が更新されました。 – yeppe

答えて

1

Struts2のアクションに大きなファイルをアップロードすると、問題はその要求がないかもしれないですデフォルトでStruts2で使用されている制限に従います。構成設定では、値は2097152に設定されています。アクションごとの制限を設定することもできます。それについてのより多くのあなたはStruts2 File Upload - Advanced Configurationに見つけることができます:

Strutsの2 default.propertiesファイルは、ファイルのアップロードの動作に影響を与えるいくつかの設定を定義します。これらの値を変更する必要があるかもしれません。名前とデフォルト値は次のとおりです。

struts.multipart.parser=jakarta 
struts.multipart.saveDir= 
struts.multipart.maxSize=2097152 

このドキュメントのページから次のセクションでは、下線フレームワークで使用されるファイルサイズの制限について気づいたFile Size Limitsある(Struts2の、コモンズ、ファイルアップロード) :

ファイルサイズには2つの制限があります。最初は struts.multipart.maxSizeであり、これはStruts 2 default.propertiesファイルからのものです。この設定は、セキュリティ上の理由から、 は、悪意のあるユーザーが非常に大きなファイルをサーバーのディスク領域のファイル にアップロードすることを禁止しています。この設定のデフォルトは約2 メガバイトに設定されており、受信するフレームワークが必要な最大サイズファイル(2ギグ最大) に調整する必要があります。フォームに複数のファイル をアップロードする場合、struts.multipart.maxSizeは に適用され、個々のファイルサイズには適用されません。その他の設定、 maximumSizeは、特定のアクションが大きすぎるファイルを受け取らないようにするために使用されるインターセプタ設定です。次の例では、両方の設定の 場所に注意してください:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
    <constant name="struts.multipart.maxSize" value="1000000" /> 

    <action name="doUpload" class="com.example.UploadAction"> 
     <interceptor-ref name="basicStack"/> 
     <interceptor-ref name="fileUpload"> 
      <param name="maximumSize">500000</param> 
     </interceptor-ref> 
     <interceptor-ref name="validation"/> 
     <interceptor-ref name="workflow"/> 

     <result name="success">good_result.jsp</result> 
    </action> 
</struts> 

ファイルサイズは、上記の構成設定を超えた場合、疑似プログレスバーは、すぐにそれが応答を返すように停止します。それは、スレッシュ速度とファイルサイズに依存する1%または100%になる可能性があります。しかしサーバー側では、例外が発生する可能性があります。

org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (xxx) exceeds the configured maximum (yyy) 

および次の警告が表示されることがあります。フレームワークの制限を超えていない場合は、フレームワークのファイルサイズ制限を調整することができます。