0

我已经能够使用调用处理上传的函数的自定义字段模板成功上传图像。然后它收集返回 url 并从那里,我不知道如何将其插入到字段中以与表单一起保存。

任何帮助将非常感激 :)

这是我的代码:

var myApp = angular.module('myApp', ['ng-admin', 'backand', 'ngFileUpload']);


//myApp.directive('dashboardSummary', require('./dashboards/dashboardSummary'));


myApp.config(['BackandProvider', function(BackandProvider) {
BackandProvider.setAppName('');
BackandProvider.setSignUpToken('');
BackandProvider.setAnonymousToken('');

}]);


myApp.config(function(RestangularProvider) {

// add a response interceptor
RestangularProvider.addResponseInterceptor(function(data, operation, what, url, response, deferred) {
  var extractedData;
  // .. to look for getList operations
  if (operation === "getList") {
    // .. and handle the data and meta data
    extractedData = data.data;
    extractedData.meta = data.data.__metadata;
  } else {
    extractedData = data;
  }
  return extractedData;
});

});

myApp.config(['NgAdminConfigurationProvider','BackandProvider', function (nga, BackandProvider, $scope) {
// create an admin application

BackandProvider.setAppName('');
BackandProvider.setSignUpToken('');
BackandProvider.setAnonymousToken('');

var admin = nga.application('Pocket Release Admin Manager')
  .baseApiUrl('https://api.backand.com/1/objects/'); // main API endpoint#








// Users
var user = nga.entity('users');
user.listView().fields([
    nga.field('firstName').isDetailLink(true),
    nga.field('lastName'),
    nga.field('email')
]);
user.creationView().fields([
    nga.field('firstName'),
    nga.field('lastName'),
    nga.field('email', 'email')
]);
user.editionView().fields(user.creationView().fields());
// add the user entity to the admin application
admin.addEntity(user);


// Platforms
var platforms = nga.entity('platforms');
platforms.listView().fields([
    nga.field('id'),
    nga.field('platform_name'),
]);
platforms.creationView().fields([
    nga.field('id'),
    nga.field('platform_name'),
    nga.field('platform_id')
]);
platforms.editionView().fields(platforms.creationView().fields());
admin.addEntity(platforms);

var data = {};

// Games
var games = nga.entity('games');
games.listView().fields([
    nga.field('id'),
    nga.field('game_title').isDetailLink(true),
    nga.field('game_url'),
    nga.field('platforms', 'reference')
            .targetEntity(platforms)
            .targetField(nga.field('platform_name'))
            .label('Platform')
]);
games.creationView().fields([
    nga.field('game_title'),
    nga.field('image').template('<img ng-src="{{game_url}}" ng-show="game_url">'),
    nga.field('game_url', 'file').uploadInformation({'url':'', 'apifilename':'game_url'}).template('<div ng-controller="main"><label class="btn btn-default btn-file">Browse<input id="fileInput" field="::field" value="entry.values[{{main}}]" entry="entry" entity="::entity" form="formController.form" datastore="::formController.dataStore" type="file" style="display: none;" accept="*/*" ng-click="initUpload()" /></label></div>', true),
    nga.field('platforms'),
    nga.field('game_description'),
    nga.field('game_boxart'),
    nga.field('game_release_uk', 'date'),
    nga.field('game_release_us', 'date'),
    nga.field('game_release_eu', 'date')
]);
games.editionView().fields(games.creationView().fields());
admin.addEntity(games);



// Dash


admin.dashboard(nga.dashboard()
    .addCollection(nga.collection(games)
        .name('total_games')
        .title('Total Games')
        .fields([
            nga.field('game_title')
        ])
        .sortField('game_title')
        .sortDir('DESC')
        .order(1)
    ).template(`
        <div class="row dashboard-starter"></div>
        <dashboard-summary></dashboard-summary>
        <div class="row dashboard-content">
            <div class="col-lg-6">
                <div class="panel panel-default">
                    <ma-dashboard-panel collection="dashboardController.collections.total_games" entries="dashboardController.entries.total_games" datastore="dashboardController.datastore"></ma-dashboard-panel>
                </div>
            </div>
        </div>
        `));


// Menu Customize

// customize menu
  admin.menu(nga.menu()
      .addChild(nga.menu(user).icon('<span class="glyphicon glyphicon-file"></span> ')) // customize the entity menu icon
      .addChild(nga.menu(games).icon('<span class="glyphicon glyphicon-folder-open"></span> ')) // you can even use utf-8 symbols!
      .addChild(nga.menu(platforms).icon('<span class="glyphicon glyphicon-tags"></span> '))
  );



// attach the admin application to the DOM and execute it
nga.configure(admin);
}]);


myApp.controller('main', function ($scope, $rootScope, $location, $http, Backand) {

    // Image upload stuff

    $scope.initUpload = function(){

        var fileInput = document.getElementById('fileInput');

        fileInput.addEventListener('change', function(e) {
          imageChanged(fileInput);
        });
      }


    function imageChanged(fileInput) {

        //read file content
        var file = fileInput.files[0];
        var reader = new FileReader();

        reader.onload = function(e) {
          upload(file.name, e.currentTarget.result).then(function(res) {
            $scope.imageUrl = res.data.url;
            $scope.filename = file.name;
            return res.data.url;
          }, function(err){
            alert(err.data);
          });
        };

        reader.readAsDataURL(file);
      };



    function upload(filename, filedata) {
        // By calling the files action with POST method in will perform 
        // an upload of the file into Backand Storage
        return $http({
          method: 'POST',
          url : Backand.getApiUrl()+'/1/objects/action/games',
          params:{  
            "name": 'files'
          },
          headers: {
            'Content-Type': 'application/json'
          },
          // you need to provide the file name and the file data
          data: {
            "filename": Math.floor(Date.now() / 1000) + ''+ filename.match(/\.[0-9a-z]+$/i),
            "filedata": filedata.substr(filedata.indexOf(',') + 1, filedata.length) //need to remove the file prefix type
          }
        }).success(function(data, status, headers, config) {

                //$scope.game_url = data.url;
                //$("#game_url").addClass("ng-dirty ng-valid-parse ng-touched").removeClass("ng-pristine ng-untouched");
                //$("#game_boxart").val(data.url).addClass("ng-dirty ng-valid-parse ng-touched").removeClass("ng-pristine ng-untouched");
                return data.url;

         });
      };

});
4

1 回答 1

0

您是否尝试过对 backand 进行 PUT 调用以将此 URL 保存在相关列中?

return $http({
          method: 'PUT',
          url : Backand.getApiUrl()+'/1/objects/games/YOUR_GAME_ID',
          headers: {
            'Content-Type': 'application/json'
          },
          data: {
            urlColumn:imageUrl
          }
        }).success(function(data, status, headers, config) {
        .....
         });
于 2016-06-29T13:31:23.347 回答