0

約 1 週間、grails 4 アプリケーションの製品環境デプロイメントに関する問題を解決しようとしています。run-app または java -jar warfile.war を使用してアプリケーションをローカルで実行すると、ファイルをアップロードして、コントローラでマルチパート コンテンツを利用できるようになります。アプリケーションをライトセイル ubuntu 20 サーバーにデプロイして実行すると、何らかの理由でパーツがそこにありません。

UI フォーム コード:

<form id="file-form-${attrs.id}" enctype="multipart/form-data">
        <input style="display:none;" id="${attrs.id}-file" type="file" name="file"
               accept="image/png, image/jpeg, image/tiff"/>
    </form>

UI ajax/js コード:

var jForm = new FormData($('#file-form-'+id)[0]);
        jForm.append("uploadField", $("#file-form-"+id).find('input[type="file"]').get(0).files[0]);

        $.ajax({
            url: '/files/uploadImage',
            type: "POST",
            data: jForm,
            enctype: 'multipart/form-data',
            processData: false,
            cache: false,
            contentType: false
        }).done(function(data) {
            // ...
        }).fail(function(jqXHR, textStatus) {
            // ...
        });

コントローラー (すべてのログ ステートメントは明確にするためにここにあることに注意してください。書かれているようにかなり見苦しく、明確になるとクリーンアップされます):

    def uploadImage() {
        try {
            log.debug("FilesController.uploadImage: IN for user ${session.user?.id}")
            if (request instanceof MultipartHttpServletRequest) {
                MultipartHttpServletRequest rqst = (MultipartHttpServletRequest) request
                def myFile = params['uploadField']
                params.each { k, v ->
                    log.debug("params k ${k}, v ${v}")
                }
                request.requestHeaders.each {k, v ->
                    log.debug("headers k ${k}, v ${v}")
                }
                def f
                log.debug("parts " + request.parts?.size())
                request.parts.each {part ->
                    log.debug("part ${part.name}")
                    if (f == null) f = part
                }
                log.debug("fileNames: ${request.getFileNames()}")
                request.getFileNames().each { String fileName ->
                    log.debug("fileName: ${fileName}")
                }
                request.fileMap.each { String name, MultipartFile file ->
                    log.debug("Looping fileMap: name: ${name} and file ${file}")
                    if (f == null) f = file
                }
                log.debug('file: ' + f)
                if (f == null) f = myFile
                log.debug('file: ' + f)

                log.debug("FilesController.uploadImage: calling imageService for user ${session.user?.id} ")
                log.debug("imageService " + imageService)
                File file = imageService.saveImage(f, session.user)
                render text: file?.id
                return
            }
        } catch (Exception e) {
            log.error("FilesController.uploadImage: error ${e.getMessage()}")
        }
        render text: ''
    }

ログ (本番環境):2020-12-07 18:11:51.977 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : FilesController.uploadImage: IN for user uuid-xxxxx 2020-12-07 18:11:51.978 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : params k controller, v files 2020-12-07 18:11:51.978 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : params k format, v null 2020-12-07 18:11:51.978 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : params k action, v uploadImage 2020-12-07 18:11:51.980 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k host, v [xxx.com] 2020-12-07 18:11:51.980 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k connection, v [keep-alive] 2020-12-07 18:11:51.980 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k content-length, v [3477461] 2020-12-07 18:11:51.980 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k accept, v [*/*] 2020-12-07 18:11:51.981 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k x-requested-with, v [XMLHttpRequest] 2020-12-07 18:11:51.981 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k user-agent, v [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.67 Safari/537.36] 2020-12-07 18:11:51.981 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k content-type, v [multipart/form-data; boundary=----WebKitFormBoundaryNqkRdP2KDJ3aJYMb] 2020-12-07 18:11:51.981 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k origin, v [https://example.com] 2020-12-07 18:11:51.981 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k sec-fetch-site, v [same-origin] 2020-12-07 18:11:51.982 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k sec-fetch-mode, v [cors] 2020-12-07 18:11:51.982 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k sec-fetch-dest, v [empty] 2020-12-07 18:11:51.982 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k referer, v [https://example.com/toolsList/list?toolSetID=2c9a8202763005520176300c0254001d] 2020-12-07 18:11:51.982 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k accept-encoding, v [gzip, deflate, br] 2020-12-07 18:11:51.982 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k accept-language, v [en-US,en;q=0.9] 2020-12-07 18:11:51.982 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : headers k cookie, v [pvisitor=ff1209b4-edb0-4246-b877-8e42fe356908; JSESSIONID=C8C338FA7AC3DA7F0A967492864939BF] 2020-12-07 18:11:51.983 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : parts 0 2020-12-07 18:11:51.983 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : fileNames: java.util.LinkedHashMap$LinkedKeyIterator@5f7cb675 2020-12-07 18:11:51.983 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : file: null 2020-12-07 18:11:51.983 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : file: null 2020-12-07 18:11:51.984 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : FilesController.uploadImage: calling imageService for user uuid-xxx 2020-12-07 18:11:51.984 DEBUG --- [nio-8443-exec-2] xxx.files.FilesController : imageService xxx.files.ImageService@5c93194d 2020-12-07 18:11:51.985 INFO --- [nio-8443-exec-2] xxx.files.ImageService : FilesService.saveImage: IN for uuid-xxx named null 2020-

ローカルには、そこにファイルがあります。

私のapplication.ymlでは:

grails:
    disableCommonsMultipart: false
    web:
        disable:
            multipart: false

ファイルの内容がローカル環境では受信されているのに、実稼働環境では受信されていない理由がわかりません。AWS Lightsail が https リクエストからコンテンツを削除するとは想像できません。ローカルでは、https ではなく http を使用していますが、それが問題になる理由がわかりません。

何か案は?あなたが提供できる洞察を前もって感謝します。

4

1 に答える 1

0

最終的に、問題はsslに関連していることが判明しました。私が使用している grails のバージョンは 4.0.3 です。そのバージョンの組み込みの tomcat 依存関係は org.springframework.boo:spring-boot-starter-tomcat であり、プルされるバージョンは 2.1.13.RELEASE です。このスプリング ブート ライブラリは、Tomcat バージョン 9.0.31 を利用しています。Tomcat バージョン 9.0.31 でのスプリング ブートを使用したマルチパート ファイルのアップロードが失敗するという記事を見つけたら、ssl でのマルチパート ファイルの解析に関する問題を修正する tomcat バージョンを指定するだけで済みました。

compile "org.apache.tomcat.embed:tomcat-embed-websocket:9.0.33"
compile "org.apache.tomcat.embed:tomcat-embed-core:9.0.33"
compile "org.apache.tomcat.embed:tomcat-embed-el:9.0.33"
compile "org.apache.tomcat:tomcat-juli:9.0.33"
compile "org.apache.tomcat:tomcat-annotations-api:9.0.33"

他の誰かの時間を節約できることを願っています。平和。

于 2020-12-09T00:05:07.970 に答える