1

ファイルをサーバーにアップロードするための署名付きアプレットを作成しました。コードは正常に実行されていますが、アプレットからそのファイルをサーバーに保存するためにコードが配置されているサーバー側コントローラーにそのファイルを送信したいと考えています。

署名済みアプレットの私の 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();
    }

そして、My 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)

では、どこが間違っているのか、自分のコードでどのような変更を行う必要があるのか​​. 2 つ目は、コントローラーで誰がファイルを取得できるかということです。

4

2 に答える 2

1

私はその問題の解決策を得ました。ここに、既存のコードで変更したものがあります

私の署名アプレット:

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

今では正常に動作しています。

于 2012-08-10T08:49:56.487 に答える
0

詳細が必要...

いくつかの提案...

パーツオブジェクトとは

「パーツ」ごとにファイルをアップロードする場合は、配列を使用する代わりにMultipartEntity writeTo メソッドをオーバーライドして大きなファイルをアップロードすることをお勧めしますか、それとも問題ではないでしょうか?

キャストに関しては…そのセリフが問題になるのではないでしょうか

MultipartHttpServletRequest m = (MultipartHttpServletRequest) request;

原則として、HttpClient は FileUpload lib と同等に機能します。代わりにそれを使用しないのはなぜですか?

もう1つ...コンテンツのmimeを指していますtext/xmlが、特にbinファイル部分の場合はxmlですか? application/octet-stream代わりに何らかのものであるべきではありませんか?

とにかく、それはあなたの質問でより多くの詳細を提供するためにあなたがより役立つでしょう

于 2012-08-01T20:02:27.000 に答える