0

このangularjs html5アップロードの例でJSFiddleにドロップされたファイルが欲しいです:

http://jsfiddle.net/danielzen/utp7j/

grails コントローラーによってバックエンドにアップロードされます。これを達成しようとしているときに、単純な grails コントローラーを作成しました。

class UploadController {

    def index() {

        if (request instanceof MultipartHttpServletRequest){
            for(filename in request.getFileNames()){
                MultipartFile file = request.getFile(filename)
                String newFileName = UUID.randomUUID().toString() + file.originalFilename.substring(file.originalFilename.lastIndexOf("."))
                file.transferTo(new File("/home/myuser/temp/$newFileName"))
            }
        }

        render "ok"
    }

}

次に、grails コントローラーに対して ajax XmlHttpRequest2 POST を開きます。

xhr.open("POST", "http://localhost:8080/app/upload")

しかし、grails コントローラーはリクエストを MultipartHttpServletRequest にキャストできません。これはおそらく、この ajax による grails コントローラーの呼び出し方法が multipart/form-data によるアップロード方法を使用していないためです。enctype multipart/form-data の xhr のヘッダーを無駄に設定しようとしました。

現時点では完全に立ち往生しており、grailsコントローラーでアップロードされたファイルを処理する方法を知りたいです

4

3 に答える 3

0

あなたが得るフィドルからアップロードを行うときにネットワークをのぞき見る:

------WebKitFormBoundarygZi30fqQLB2A9qAC
Content-Disposition: form-data; name="uploadedFile"; filename="file.txt"
Content-Type: text/javascript


------WebKitFormBoundarygZi30fqQLB2A9qAC--

Grails へのパラメータ キーとして "uploadedFile" を取得できるので、次のようなコントローラー アクションを記述できます。

def uploadFile(CommonsMultipartFile uploadedFile) {
    ///accessing the file data: uploadedFile.bytes, uploadedFile.contentType, uploadedFile.originalFilename
}

何が渡されているかを確認するには、アクションが受け取る params マップでデバッグを行い、それに応じてアクション メソッドのパラメーター名を変更します。

于 2013-10-16T01:39:42.223 に答える