0

我有一个具有以下内容的域对象:

class Color {
  String name
  String fileLocation

  static constraints = {
    name (nullable: false, blank: false)
  }
}

在我的控制器中,我正在执行以下操作:

def save() {
  def colorInstance = new Color(params)
  if (colorInstance.save(flush: true)) {
    def file = request.getFile("myfile")
    if (!file.empty && uploadService.isFileAllowed(file)) {
      uploadService.uploadFile(file, file.originalName, "folderName")
    }
  }
  else {
    render (view: "create", model: [coorInstance: colorInstance])
  }
}

这一切都很好,但是,当上传的文件不是允许的文件时,我不确定如何抛出错误。即uploadService.isFileAllowed(file)返回false

我怎样才能向用户抛出错误说

不允许上传文件

什么时候uploadService.isFileAllowed(file)返回 false ?

笔记:

isFileAllowed方法是读取文件的前几个字节以确定它是什么类型的文件。

4

3 回答 3

1

如果您将错误消息保存到闪存中,然后在页面上呈现它(如果存在)怎么办? 请参阅此帖子寻求帮助

if (!file.empty && uploadService.isFileAllowed(file)) {
  uploadService.uploadFile(file, file.originalName, "folderName")
} else {
    flash.error = "Uploaded file isn't allowed"
}
于 2013-03-10T22:16:26.653 回答
1

在您的控制器中应用此登录

String fileName = "something.ext";
        int a = fileName.lastIndexOf(".");
        String extName = fileName.substring(a);
        System.out.println(fileName.substring(a));
        ArrayList<String> extList = new ArrayList<String>();
        extList.add("jpg");
        extList.add("jpeg");
        extList.add("png");
        if(extList.contains(extName))
        {
            System.out.println("proceed");
        }
        else{
            System.out.println("throw exception");
        }
于 2013-03-11T06:50:11.890 回答
0

因此,如果isFileAllowed返回 false 或文件为空,则会将 colorInstance 错误添加到 fileLocation 属性。仅当 colorInstance 验证成功时才会上传文件(以防止为未保存的对象上传文件)。

附带说明一下,部分原因是我更喜欢将文件保存在表格中。它使验证变得不那么笨拙,并且不可能在您的对象和文件之间断开连接。- 只是我的 2c。

  def save() {

  def colorInstance = new Color(params)

    def file = request.getFile("myfile")
    if (!file.empty && uploadService.isFileAllowed(file)) {
      if (colorInstance.validate()) {
        uploadService.uploadFile(file, file.originalName, "folderName")
      }
    }
    else {
      colorInstance.errors.rejectValue('fileLocation','error.message.code.here')
    }

  if (colorInstance.save(flush: true)) {
     //do whatever here
  }
  else {
    render (view: "create", model: [coorInstance: colorInstance])
  }
}
于 2013-03-11T12:07:45.287 回答