我尝试使用AjaxForm在grails app中异步提交文件。对于小文件,它工作得很好,但是当我尝试使用大文件时,ajaxForm永远不会触发函数错误或成功。在这两种情况下(大文件和小文件),所有文件都成功存储在服务器端。这是我的代码:
var opts = {
beforeSubmit: AntesEnvio,
error: ErrorEnvio,
uploadProgress: ProgresoEnvio,
success: CorrectoEnvio
}
$('div#modal-cargar-ficheros .upload-form').ajaxForm(opts)
function CorrectoEnvio(){
do somethings ...
}
function ErrorEnvio(){
do somethings ...
}
任何人都帮帮我!! 提前谢谢。
=============编辑==========================
我试图在不使用AJAX的情况下测试应用程序,并且它是相同的,服务器处理所有数据但没有回答。我检查服务器端的数据库和文件,一切都很好,但是当它完成上传文件时,浏览器会说:等待localhost ......并且永远不会完成
我的gsp表格:
<g:uploadForm class="upload-form" method="POST"
controller="fileManager" action="upload">
<div class="modal-body">
<div class="area-msgs">
</div>
%{-- Selector de Ficheros/Carpeta oculto --}%
<input name="files[]" class="upload" type="file" id="upload-files" webkitdirectory />
<div class="area-seleccion">
<div class="boton-select pull-left">
<div id="select-files" class="btn btn-large" >
<span class="icon-folder"></span>
</div>
</div>
<div class="texto-cant pull-left">0 ficheros seleccionados</div>
</div>
</div>
<div class="modal-footer">
<g:submitButton name="btn-submit-files"
class="btn btn-primary"
value="Enviar">
</g:submitButton>
</div>
</g:uploadForm>
我在控制器中的上传操作:
def upload() {
//Recibo los datos de la vista
//Si no existe un directorio para el usuario
//en el servidor lo creo
def fullPath = 'uploads' +
File.separator +
session.user.userid +
File.separator
def userFolder = new File(fullPath)
if (!userFolder.exists()){
userFolder.mkdirs()
}
//Si vienen el (los) fichero (os) hago el envío
//al servidor
def resp = [status: 'OK']
request.getFiles("files[]").each { file ->
def documentItem = new Document()
documentItem.docName = file.originalFilename
// Genero un numero aleatorio para evitar
// nombres duplicados
def num = (new Random()).nextInt(99999)
def fileName = num + '_' + file.originalFilename
//Si existe un fichero con ese nombre
//vuelvo a intentarlo
while (new File(fullPath + fileName).exists()){
num = (new Random()).nextInt(99999)
fileName = num + '_' + file.originalFilename
}
documentItem.fullPath = fullPath + fileName
documentItem.size = FileUtilService.humanSize(file.getSize())
//Una vez creado el nombre unico guardo
//el fichero en el servidor
file.transferTo( new File(documentItem.fullPath) )
if (!documentItem.save()){
resp = [status: 'Error']
}
} // --> Fin de recorrer cada fichero subido
render resp as JSON
}
任何帮助或建议?