2013-04-20 150 views
4

我使用Blueimp和服務器端是Java,Struts2。我無法找到使用Java的示例,無論如何,我設法使用示例代碼,但當我試圖上傳單個文件時,我得到"Empty file upload result"。 HTML部分是一樣的,我不粘貼在這裏,因爲它可能會很長。blueimp jquery文件上傳空文件上傳結果struts2,fileitems爲空

jQuery的是:

$(document).ready(function() { 
    'use strict'; 

    // Initialize the jQuery File Upload widget: 
    $('#fileupload').fileupload(); 

    // Enable iframe cross-domain access via redirect option: 
    $('#fileupload').fileupload(
     'option', 
     'redirect', 
     window.location.href.replace(
      /\/[^\/]*$/, 
      '/cors/result.html?%s' 
     ) 
    ); 

    if (window.location.hostname === 'blueimp.github.com') { 
     // Demo settings: 
     $('#fileupload').fileupload('option', { 
      url: '//jquery-file-upload.appspot.com/', 
      maxFileSize: 5000000, 
      acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i, 
      process: [ 
       { 
        action: 'load', 
        fileTypes: /^image\/(gif|jpeg|png)$/, 
        maxFileSize: 20000000 // 20MB 
       }, 
       { 
        action: 'resize', 
        maxWidth: 1440, 
        maxHeight: 900 
       }, 
       { 
        action: 'save' 
       } 
      ] 
     }); 
     // Upload server status check for browsers with CORS support: 
     if ($.support.cors) { 
      $.ajax({ 
       url: '//jquery-file-upload.appspot.com/', 
       type: 'HEAD' 
      }).fail(function() { 
       $('<span class="alert alert-error"/>') 
        .text('Upload server currently unavailable - ' + 
          new Date()) 
        .appendTo('#fileupload'); 
      }); 
     } 
    } else { 
     // Load existing files: 
     $('#fileupload').each(function() { 
      var that = this; 
      $.getJSON(this.action, function (result) { 
       if (result && result.length) { 
        $(that).fileupload('option', 'done') 
         .call(that, null, {result: result}); 
       } 
      }); 
     }); 
    } 

}); 

行動:

@Namespace("/") 
@InterceptorRefs({ 
    @InterceptorRef("fileUpload"), 
    @InterceptorRef("basicStack") 
}) 
public class UploadAction extends ActionSupport implements ServletRequestAware, ServletResponseAware{ 

    HttpServletRequest req; 
    HttpServletResponse res; 
    // private File fileUploadPath=new File("c:\\temp\\"); 
    private List<File> uploads = new ArrayList<File>(); 
    private List<String> uploadFileNames = new ArrayList<String>(); 
    private List<String> uploadContentTypes = new ArrayList<String>(); 

    public List<File> getUploads() { 
     return uploads; 
    } 

    public void setUploads(List<File> uploads) { 
     this.uploads = uploads; 
    } 

    public List<String> getUploadFileNames() { 
     return uploadFileNames; 
    } 

    public void setUploadFileNames(List<String> uploadFileNames) { 
     this.uploadFileNames = uploadFileNames; 
    } 

    public List<String> getUploadContentTypes() { 
     return uploadContentTypes; 
    } 

    public void setUploadContentTypes(List<String> uploadContentTypes) { 
     this.uploadContentTypes = uploadContentTypes; 
    } 

    @Action(value="upload", results = { @Result(name="success", type="json") 
    }) 
    public String uploadFiles() throws IOException 
    { 
     System.out.println("upload1"); 
     System.out.println("files:"); 
     for (File u: uploads) { 
      System.out.println("*** "+u+"\t"+u.length()); 
     } 
     System.out.println("filenames:"); 
     for (String n: uploadFileNames) { 
      System.out.println("*** "+n); 
     } 
     System.out.println("content types:"); 
     for (String c: uploadContentTypes) { 
      System.out.println("*** "+c); 
     } 
     System.out.println("\n\n"); 
     if (!ServletFileUpload.isMultipartContent(req)) { 
      throw new IllegalArgumentException("Request is not multipart, please 'multipart/form-data' enctype for your form."); 
     } 
     return SUCCESS; 
    } 

    @Override 
    public void setServletRequest(HttpServletRequest hsr) { 
     this.req=hsr; 
    } 

    @Override 
    public void setServletResponse(HttpServletResponse hsr) { 
     this.res=hsr; 
    } 

} 

正如我所說的,我已經改變了操作文件,但我仍然得到所有空值的文件,並且在Firebug的GET響應中我看到"Request is not multipart, please 'multipart/form-data' enctype for your form"

謝謝&關心。

+2

'我在網上找不到有關java作爲後端的很多信息 - >這使我的一天:D – 2013-04-21 13:19:36

回答

5

您可以使用fileUpload interceptor解析"multipart/form-data"請求。它使用與MultipartRequestWrapper相同的commons-fileupload實現來準備Struts2調度程序的操作。更多關於如何用文件上傳的例子,你可以找到here

+0

你的意思是我上面做的是錯誤的?這不適用於struts2? – Aadam 2013-04-21 04:19:19

+0

k,在螢火蟲我可以看到這一點,現在如何解決這個問題,我已經給出了enctype =「multipart/form-data」的形式,y它沒有采取:@ – Aadam 2013-04-21 04:54:33

+0

我編輯了這個問題請看看它。 – Aadam 2013-04-21 05:26:33