私は AngularJS を使用して Grails (2.3.7) アプリケーションに取り組んでいます。アプリケーションでファイルをアップロードする必要があります。フロント エンドは Angular によって管理されているため、Angular コントローラーからファイルをアップロードしています。私はこれ とこれの議論を経て、次のようにアップロードしようとしました。
私のファイルアップローダーは
<input type="file" ng-file-select="onFileSelect($files)">
アンギュラーコントローラーは
myapp.controller('createWebController',['$scope','$http','$upload',function($scope,$http,$upload){
$scope.onFileSelect = function($files) {
var file = $files[0];
console.log(file)
$upload.upload({
url: 'UploadLogo/upload', //upload.php script, node.js route, or servlet url
file: file,
method: 'POST' ,
fileFormDataName: "myFile",
}).progress(function(evt) {
console.log('percent: ' + parseInt(100.0 * evt.loaded / evt.total));
}).success(function(data, status, headers, config) {
// file is uploaded successfully
console.log(data);
})
.error(function(data){ console.log(data)})
;
};
}])
サーバー上で、私はこのサービスを使用しており、アップロード ハンドラー コードは
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.multipart.MultipartFile
import org.codehaus.groovy.grails.web.context.ServletContextHolder
class UploadLogoController {
FileUploadService fileUploadService
def upload() {
def avatarImage = request.getFile('file')
if (!avatarImage.isEmpty())
{
userInstance.avatar = fileUploadService.uploadFile(avatarImage, "logo.png", "~/Desktop/upload")
render "ok"
}
else
{
render "Empty"
}
}
}
しかし問題は、私が500 (Internal Server Error)
grailsから取得していることです。ファイルはアップロードされていません。
またCannot invoke method isEmpty() on null object
、ファイルがサーバーに送信されていないことを意味します。ここで何が問題なのか..助けてください..