2012-08-01 81 views
1

我已經創建了一個用於將文件上傳到服務器的簽名小程序。代碼運行良好,但我想從小程序發送該文件到服務器端控制器,代碼已將該文件保存到服務器。簽名的Applet和服務器端控制器之間的通信

我SENDFILE代碼在簽名Applet:

public static void sendFile(String destFileName) throws IOException {  
     String filePrivacy = "Public"; 
     String fileKeyword = "uploadFileDocumentName"; 
     String fileComments = "fileComments"; 
     String fileType = "txt"; 
     String fileFolder = "/Works"; 
     String fileDetails = ""; 
     HttpClient client = new HttpClient(); 
     PostMethod postMethod = new PostMethod(
       "http://localhost:8080/fileUpload/encryptFileUpload.works?filePrivacy="+filePrivacy+"&fileKeyword="+fileKeyword+"&fileComments="+fileComments+"&fileType="+fileType+"&fileFolder="+fileFolder+"&fileDetails="+fileDetails); 

     File f = new File(destFileName); 
     Part[] parts = {new FilePart(f.getName(), f)}; 
     postMethod.setRequestEntity(new MultipartRequestEntity(parts, postMethod.getParams())); 
     postMethod.setRequestHeader("Content-type", "text/xml; charset=ISO-8859-1"); 
     client.executeMethod(postMethod); 
     postMethod.releaseConnection(); 
    } 

和我的UploadController的方法是這樣的:

@RequestMapping(value = "/encryptFileUpload.works") 
    public String uploadEncryptFile(String filePrivacy, 
      String fileKeyword, 
      String fileComments, 
      String fileType, 
      String fileFolder, 
      HttpServletRequest request, HttpServletResponse response) { 
     try { 
      Map<String, Object> requestMap = new HashMap<String, Object>(); 
      requestMap.put(DMSConstants.JCR_FILE_PRIVACY, filePrivacy); 
      requestMap.put(DMSConstants.JCR_FILE_KEYWORD, fileKeyword); 
      requestMap.put(DMSConstants.JCR_FILE_COMMENTS, fileComments); 
      requestMap.put(DMSConstants.JCR_FILE_TYPE, fileType); 
      MultipartHttpServletRequest m = (MultipartHttpServletRequest) request; 
      MultipartFile file = m.getFile("Filedata"); 
      Node folderNode = contentPublishService.getFolderNode(fileFolder); 
      Node node = contentPublishService.saveFileToRepository(folderNode, 
        file.getInputStream(), file.getOriginalFilename(), 
        requestMap); 
     } catch (RepositoryException e) { 
      e.printStackTrace();   
     return null; 
    } 

在該行MultipartHttpServletRequest m = (MultipartHttpServletRequest) request;我得到的異常,如:

java.lang.ClassCastException: org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestWrapper cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest 
    at com.nmmc.works.web.controller.FileUploadController.uploadEncryptFile(FileUploadController.java:177) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 

那麼哪裏出了問題,我應該在代碼中做些什麼改變。第二件事是我可以在控制器上獲得文件?

回答

0

需要更多的細節......

只是一些建議...

什麼是部分對象?

如果你想上傳文件'部分'我可能會建議只是爲了覆蓋MultipartEntity writeTo方法來上傳大文件,而不是使用數組或可能不是事情?

就鑄造......我可以猜測該行可能會導致問題

MultipartHttpServletRequest m = (MultipartHttpServletRequest) request; 

按規定的HttpClient正在與LIB文件上傳削減。那麼爲什麼不使用它呢?

還有一件事......你指出內容MIME爲text/xml,但它是XML,尤其是如果它是一個bin文件的一部分?它不應該是某種application/octet-stream而是?

無論如何,這將是更有幫助你在你的問題

1

我得到了該問題的解決方案提供更多的細節。在這裏我在我現有的代碼已經改變

我的簽名Applet:

MultipartPostMethod mPost = new MultipartPostMethod(uri);  
mPost.addParameter("Filedata", f.getName(), f); 
client.executeMethod(mPost); 

現在,它的工作的罰款。