0

20MB、30MB、100MB などの大きなビデオ ファイルをアップロードするには、どの grails プラグインを使用すればよいですか。プログレス バーも表示したいのですが、これには Super file upload プラグインを使用しようとしましたが、何か間違っていると思います、それは私にとってはうまくいきません。これを使用するか、他のより使いやすいプラグインを使用する必要があります.Jqueryプラグインも見ましたが、一度に1つのビデオを追加するだけでよいので、スーパーだと思いますファイルアップロードプラグインは私にとって良いでしょう。

試してみましたが、エラーが発生しました。コードについては以下をご覧ください。

ただし、スーパー ファイル アップロード プラグインのエラーについては:

私のGSPには次のものがあります:

    <sfu:generateConfiguration fileSize="300" form="bookForm"  buttonWidth="104" buttonHeight="30"/>

<form class="form-horizontal" id="bookForm" name="saveVideoFile" action="saveVideoFile" onsubmit="return sfuSubmitForm(this);">
        <div class="control-group">
            <label class="control-label" for="inputEmail">Select Category</label>
            <div class="controls">

            <label class="control-label" for="inputPassword">Upload file</label>
        <div class="control-group">
            <div class="controls">
                 Choose file: 
                 <sfu:fileUploadControl></sfu:fileUploadControl>
                    <br/>
                    Progress bar: <sfu:fileUploadProgressBar/>
                    <br/>
            </div>
        </div>
          <input type="submit" value="Save">
    </form>

次に、コントローラの saveVideoFile アクションで:

def saveVideoFile(){
    String uploadFilename = params.uploadedFileId
    println("params=${params}")

    String fileUploaded

    if ( uploadFilename ) { // get the full path name of the file from the temp directory
        def file = superFileUploadService.getTempUploadFile(uploadFilename)

        fileUploaded = fileUploadService.uploadFile( file, "newFile.jpg", "assets/uploadFile/" );
        println("fileUploaded=${fileUploaded}")

    }else{ // file was not uploaded by flash. User might have javascript off
        def fileStream = request.getFile('sfuFile'); // handle normal file upload as per grails docs
        fileUploaded = fileUploadService.uploadFile( fileStream, "newFile.jpg", "assets/uploadFile/" );
        render "Nothing to upload"
    }


}

ファイルオブジェクトを保存するためのサービスに関数があります:

 String uploadFile( File file, String name, String destinationDirectory ) {

        def serveletContext = ServletContextHolder.servletContext
        def storagePath = serveletContext.getRealPath( destinationDirectory )

        def storagePathDirectory = new File( storagePath )

        if( !storagePathDirectory.exists() ){
            println("creating directory ${storagePath}")
            if(storagePathDirectory.mkdirs()){
                println "SUCCESS"   
            }else{
                println "FAILED"
            }
        } 

        // Store file

        println("file In service=${file}")
        //def tempFile = file.getBytes()
        def tempFile = file
        if(!tempFile?.isEmpty()){
            tempFile.transferTo( new File("${storagePath}/${name}") )
            println("Saved File: ${storagePath}/${name}")
            return "${storagePath}/${name}" 
        }else{
            println "File: ${tempFile.inspect()} was empty"
            return null
        }
}

保存すると、次のようになります。

メソッドのシグネチャはありません: java.io.File.isEmpty() は引数の型に適用できます: () 値: [] 可能な解決策: identity(groovy.lang.Closure), isFile(), list(), dump(),インスペクト()

行で:

if(!tempFile?.isEmpty()){

サービス機能について。

tempFile変数を印刷すると、一時ストレージの場所のパスを取得しています。

私は何か間違ったことをしていることを知っています。どんな助けも役に立ちます。

4

1 に答える 1

0

スクリプトに問題が見つかりました。ファイルを Multipartfile オブジェクトとして呼び出そうとしていました。スーパー ファイル アップローダーは、ディスク上のファイルの一時的な場所を提供します。コピー機能により、指定したディレクトリに移動できます。

サービスの条件付きブロックを変更すると、次のようになります。

if(tempFile?.isFile()){
                String sourceFilePath = tempFile
                String destinationFilePath = "${storagePath}/${name}"
                (new AntBuilder()).copy(file: sourceFilePath, tofile: destinationFilePath)

                println("Saved File: ${storagePath}/${name}")
                return "${storagePath}/${name}" 
            }else{
                println "File: ${tempFile.inspect()} was empty"
                return null
            }

その後、保存されます。ファイルを一時的な場所から実際のディレクトリにコピーする必要がありました。さらにいくつかの拡張が必要になりますが、上記のコードではこのように機能します。

于 2013-07-02T06:15:55.010 に答える