无法通过 GRAILS 中的 REST 请求上传文件
Unable to upload file via REST request in GRAILS
我正在尝试使用 GRAILS 通过 REST 上传文件
curl -X POST -H "Cache-Control: no-cache" -H "Postman-Token: d5d7aef8-3964-311b-8b64-4a7a82c52323" -H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" -F "file1=myfile.jpg" -F "fname=swateek" -F "lname=jena" 'http://localhost:8081/sampleFileREST/document/upload'
这是我的控制器的样子:
class DocumentController extends RestfulController<Document> {
static responseFormats = ['json', 'xml']
def upload() {
def fileLocation="<xml>empty</xml>"
def file = request.getParameter('file1')
def f1 = request.getParameter('fname')
def f2 = "<abc>"+request.getParameter('lname')+"</abc>"
def params = "gf"
if(file.empty) {
fileLocation = "<xml>"+"File cannot be empty"+"</xml><allprm>"+params+"</allprm>"
} else {
def documentInstance = new Document()
documentInstance.filename = file.originalFilename
documentInstance.fullPath = grailsApplication.config.uploadFolder + documentInstance.filename
file.transferTo(new File(documentInstance.fullPath))
documentInstance.save()
fileLocation = "<xml>"+documentInstance.fullPath+"</xml>"
}
/* return "File uploaded to: "+documentInstance.fullPath */
render(text: fileLocation, contentType: "text/xml", encoding: "UTF-8")
}
}
我能够访问请求的参数,除了我在请求中发送的文件之外的任何内容。
无法弄清楚这里出了什么问题。
更新
我曾使用 .getParameter() 来获取文件。这是不正确的,正确的方法如下:
request.getFile('<filename>') // without the <>
这可能会在 IntelliJ 中引发错误 "Symbol Not Found" 或 "Cannot Resolve Method",请按照以下答案中的过程进行操作。
该死的 IDE 我用的 IntelliJ.
另外,获取文件时的这段代码:
def file = request.getParameter('file1')
应替换为
def file = request.getFile('file1')
以前,当我使用 request.getFile() 方法时,我遇到了 "Symbol Not Found" 错误,并且无法执行请求。
解决方法:
- 打开 IntelliJ
- 点击"File"
- 找到选项"Invalidate Caches/Restart",等待IntelliJ再次回来。
如果这不起作用,此答案中提到了另一种方法:
IntelliJ IDEA JDK configuration on Mac OS
我正在尝试使用 GRAILS 通过 REST 上传文件
curl -X POST -H "Cache-Control: no-cache" -H "Postman-Token: d5d7aef8-3964-311b-8b64-4a7a82c52323" -H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" -F "file1=myfile.jpg" -F "fname=swateek" -F "lname=jena" 'http://localhost:8081/sampleFileREST/document/upload'
这是我的控制器的样子:
class DocumentController extends RestfulController<Document> {
static responseFormats = ['json', 'xml']
def upload() {
def fileLocation="<xml>empty</xml>"
def file = request.getParameter('file1')
def f1 = request.getParameter('fname')
def f2 = "<abc>"+request.getParameter('lname')+"</abc>"
def params = "gf"
if(file.empty) {
fileLocation = "<xml>"+"File cannot be empty"+"</xml><allprm>"+params+"</allprm>"
} else {
def documentInstance = new Document()
documentInstance.filename = file.originalFilename
documentInstance.fullPath = grailsApplication.config.uploadFolder + documentInstance.filename
file.transferTo(new File(documentInstance.fullPath))
documentInstance.save()
fileLocation = "<xml>"+documentInstance.fullPath+"</xml>"
}
/* return "File uploaded to: "+documentInstance.fullPath */
render(text: fileLocation, contentType: "text/xml", encoding: "UTF-8")
}
}
我能够访问请求的参数,除了我在请求中发送的文件之外的任何内容。
无法弄清楚这里出了什么问题。
更新
我曾使用 .getParameter() 来获取文件。这是不正确的,正确的方法如下:
request.getFile('<filename>') // without the <>
这可能会在 IntelliJ 中引发错误 "Symbol Not Found" 或 "Cannot Resolve Method",请按照以下答案中的过程进行操作。
该死的 IDE 我用的 IntelliJ.
另外,获取文件时的这段代码:
def file = request.getParameter('file1')
应替换为
def file = request.getFile('file1')
以前,当我使用 request.getFile() 方法时,我遇到了 "Symbol Not Found" 错误,并且无法执行请求。
解决方法:
- 打开 IntelliJ
- 点击"File"
- 找到选项"Invalidate Caches/Restart",等待IntelliJ再次回来。
如果这不起作用,此答案中提到了另一种方法: IntelliJ IDEA JDK configuration on Mac OS