图像从angularjs 1.5上传到grails 3作为byte []并将其作为bytea保存在postgresql中

时间:2017-05-29 13:21:06

标签: angularjs postgresql grails grails-domain-class grails-controller

我已经在几天内搜索了一个解决方案。人们尝试上传图片的例子有很多。 我真的需要一些帮助来解决这个问题。我在这里有一些代码,我希望有人可以帮助我完成这个。

我在此link

中添加了我的代码
//Angularjs controller :

self.createVaerksted = function(id, navn, by, nummer, billede) {
    var data = {};
    data.vaerkstedNavn = navn;
    data.byNavn = by;
    data.vaerkstedNummer = nummer;
    data.myImage = billede[0];

    vaerkstedService.createVaerksted(data)
      .then(function(response) {
        console.log(response)
      })

    // Angularjs service 
    var prefix = 'http://localhost:8080/api/';

    createVaerksted: function(data) {
      return $http.post(prefix + 'saveVaerksted', data)
    }

提前谢谢

1 个答案:

答案 0 :(得分:0)

要使用AngularJS上传文件(图像,xls等),您可以使用FormData。 例如,使用Angular配置文件可以创建角度控制器:

firebase.auth().signInWithEmailAndPassword(inputemail, inputpassw)
    .then( function(user) {

        myEmail = user.email;
        myUid = user.uid;

        user.getIdToken()
            .then( function(token){
                myToken = token;

                location.href = "http://www.example.com/verify?email="+myEmail+"&token="+myToken+"&uid="+myUid;

            });

    }, function (error) {
       ...
    }); 

创建Grails命令:

function UploadExcelController(domainServiceFactory, contextPath, $log, $state, $stateParams) {
var vm = this;

vm.contextPath = contextPath;
var UploadExcel = domainServiceFactory('/api/uploadExcel/:id', {id: '@id'}, {
    create: {
        method: "POST",
        transformRequest: angular.identity,
        headers: { 'Content-Type': undefined }
    }
});

vm.uploadExcel = function(data){
    var fd = new FormData();
    fd.append("year", data["year"]);
    fd.append("excelFile", data["excelFile"][0]);
    $log.info(fd)
    UploadExcel.create({}, fd).$promise.then(function (res) {
        $state.go('dashboard');
    }).catch(function (err) {
        $log.info("error "+err);
        alert(""+err);
        throw err;
    });
}

并在控制器中执行业务逻辑:

class UploadExcelCommand implements Validateable {
MultipartFile excelFile
Integer year
static constraints = {
    year nullable: false
    excelFile validator: { val, obj ->
        if ( val == null ) {
            return false
        }
        if ( val.empty ) {
            return false
        }

        ['xlsx'].any { extension ->
            val.originalFilename?.toLowerCase()?.endsWith(extension)
        }
    }
}

}