签名小程序和服务器端控制器之间的通信

我创建了一个签名小程序,用于将文件上传到服务器。 代码运行正常,但我想将该文件从applet发送到服务器端控制器,代码放置在该控制器上,以将该文件保存到服务器。

签名小程序中的我的SendFile代码:

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 requestMap = new HashMap(); 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) 

那么哪里出错了,我应该在代码中做些什么改变。 第二件事是我可以在控制器上获得文件?

需要更多细节……

只是一些建议……

Part对象是什么?

如果你想通过’parts’上传文件,我可能会建议只是覆盖MultipartEntity writeTo方法来上传大文件而不是使用数组,或者可能不是这样的东西?

关于演员…我可能猜测这行可能会导致问题

 MultipartHttpServletRequest m = (MultipartHttpServletRequest) request; 

通常,HttpClient正在使用FileUpload lib。 那么为什么不使用呢?

还有一件事……你把内容mime指向text/xml但是它是xml,特别是如果它是一个bin文件部分? 不应该是某种application/octet-stream吗?

无论如何,在您的问题中提供更多详细信息会更有帮助

我得到了解决这个问题的方法。 这里我在现有代码中改变了什么

我的签名小程序:

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

现在它的工作正常。