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変数を印刷すると、一時ストレージの場所のパスを取得しています。
私は何か間違ったことをしていることを知っています。どんな助けも役に立ちます。