2012-03-20 28 views
2

forum member私はextjs 4とJAVAのファイルアップロードにいくつか問題があります。私はextjs4とアップロードフォームのコードを使用していますextjsで画像ファイルをアップロードする4 spring

は、ボタンのアップロード画像は作用を有する

{ 
            xtype: 'filefield', 
            margin: '10 0 0 5', 
            width: 296, 
            fieldLabel: 'Image', 
            emptyText: 'Select Company logo...', 
            id: 'cmplogo', 
            itemId: 'cmplogo', 
            name: 'cmplogo', 
            labelWidth: 70 
           }, 
           { 
            xtype: 'button', 
            margin: '10 0 0 90', 
            width: 89, 
            text: 'Upload Image', 
            action: 'btn-upload-img' 
           }, 

です:

fileUpload: function(btn) { 
     var win = btn.up('window'); 
     var form = win.down('form').getForm(); 
     alert('VALUE IS :'+form.getValues()); 

     if(form.isValid()){ 
      form.submit({ 
       url : 'company/UploadFile.action', 
       waitMsg: 'Uploading your file...', 
       success: function(fp, o) { 
        Ext.Msg.alert('Success', 'Your file has been uploaded.'); 
       } 
      }); 
     } 
    }, 

と下に定義された機能を備えた 'BTN-アップロード-IMG' を私のJavaコントローラは以下の機能コードを持っています

@RequestMapping(value = "/company/UploadFile.action") 
    public @ResponseBody 
    Map<String, ? extends Object> uploadFile(UploadItem uploadItem, BindingResult result) throws Exception { 
     System.out.println("QUERY TO UPLOAD FILE"); 
     try { 
      if(result.hasErrors()) { 
       for(ObjectError error: result.getAllErrors()) { 
        System.err.println("Error: "+error.getCode()+" - "+error.getDefaultMessage()); 
       } 
      } 
      else 
      { 
       MultipartFile file = uploadItem.getFileData(); 
       String fileName = null; 
       InputStream inputStream = null; 
       OutputStream outputStream = null; 
       if(file.getSize() > 0) { 
        inputStream = file.getInputStream(); 
        if(file.getSize() > 10000) { 
         System.out.println("FILE SIZE:::"+file.getSize()); 
        } 
        System.out.println("SIZE ::"+file.getSize()); 
        fileName = "E:\\images\\"+file.getOriginalFilename(); 
        outputStream = new FileOutputStream(fileName); 
        System.out.println("FILE NAME AND PATH IS ::"+fileName); 
        System.out.println("FILENNAME ::"+file.getOriginalFilename()); 

        int readBytes = 0; 
        byte[] buffer = new byte[10000]; 
        while((readBytes = inputStream.read(buffer, 0, 10000)) !=-1) { 
         outputStream.write(buffer, 0, readBytes); 
        } 
        outputStream.close(); 
        inputStream.close(); 
       } 
      } 


     } catch (Exception e) { 
      return getModelMapError("Error trying to read city"); 
     } 
     return null; 
    } 

上記の私のコードで何が間違っているかを知ってください。 私の放火魔コンソールがエラー

**uncaught exception: You're trying to decode an invalid JSON String: <pre>{"message":"Error trying to read city","success":false}</pre>** 

の下に私を与えてくれ、私は私のエラーはすぐに解決し得ることを試みることができるいくつかのソリューションを提案してください。

+0

は、あなたがあなたのケースで解決策を見つけ出すことができましたか? – pacman

答えて

3

コントローラがextjsがサポートしていないレスポンスとしてJSONデータ(application/json)を送信しています。 レスポンスのコンテンツタイプを「text/html」に設定してみてください。正常に動作します。 ResponseEntity

へ 変更@ResponseBody
@RequestMapping(value = "/company/UploadFile.action") 
public ResponseEntity<String> Map<String, ? extends Object> uploadFile(UploadItem uploadItem, BindingResult result) throws Exception { 
    HttpHeaders responseHeaders = new HttpHeaders(); 
    responseHeaders.add("Content-Type", "text/html; charset=utf-8"); 

    // your controller logic goes here 

    return new ResponseEntity<String>(response, responseHeaders, HttpStatus.OK); 
} 
+1

私は別のサーバー(ピラミッドで使用されているサーバーを貼り付ける)で同じ問題に遭遇し、http://www.sencha.com/forum/showthreadでdigz6666の答え(コンテンツタイプの部分)を確認しました.php?120201 - フォームを送信しているように見えますが、応答タイプが誤解しているようです。&p = 557527&viewfull = 1#post557527 – Walter

0

Springを使用してextjs 4以外のファイルをアップロードする場合は、restTemplateまたはApache HttpClientをmultipartDataとともに使用できます。 Springは、ファイルをアップロードするための組み込み機能を提供します。

便利なリンク -

http://blog.springsource.org/2009/03/27/rest-in-spring-3-resttemplate/

+0

イメージをアップロードすることはできますが、Image xtypeがイメージアップロードを表示できない理由がわかりません。火かき棒で私はイメージがアップロードされ、完全に読めることがわかりました。しかし、それがなぜ私にとって大きな問題であるのか –

+0

"E:\\ images \\ YOUR_FILE_NAME"にファイルを保存できましたか? –

+0

はいアップロード後に画像を保存することができます。画像フォルダのディレクトリ –

-1

あなたはFirebugのエラーで見ている文字列を返すされ、Javaの側のどこかで例外を投げています。 catchブロックにブレークポイントを追加し、例外が何であるかを調べることをお勧めします。それはあなたに何が壊れているのか、それを修正する方法をよりよく理解することができます。

+0

ここで何が間違っているのか理解できません。私はちょうどhttp://loianegroner.com/2011/07/extjs-4-file-upload-spring-mvc-3-example/チュートリアルを実装しようとしました。しかし、私はそれを動作させることができません –

+0

@CodeChimp:彼のレスポンスにはエラーが含まれているという事実はここでは問題ではありませんが、レスポンスはJavaScript(ExtJSによる)で正しく処理されません。 – Walter

0

私は同様の問題に遭遇しています。

JSONとしてレスポンスをデコードするためにExtJSに絞りました。しかし、応答は<pre>タグで囲まれています。しかし、私が火かぶりを見るとき、私はただのジェンソンの文字列を見るだけです。シーンブラウザの後ろにある普通のmultipartフォームポストであるので、何とかレスポンスを<pre>タグで囲みます。

このブラウザの動作を変更する方法がわかりません。

0

また、この同じように、"*/*"でMappingJacksonHttpMessageConverterのsupportedMediaTypesプロパティを設定することができます。

<mvc:annotation-driven> 
    <mvc:message-converters> 
     <bean class="org.springframework.http.converter.StringHttpMessageConverter" /> 
     <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"> 
      <property name="supportedMediaTypes" value="*/*" /> 
     </bean> 
    </mvc:message-converters> 
</mvc:annotation-driven> 
関連する問題