Welcome to Community Week 2025! Join us to learn, connect, and be recognized as we celebrate the spirit of Community and the power of AI. Get the details  

How to upload an image from custom portal widget and show that image in the ticket created?

manmathpanda
Giga Guru

Dear Developers,

I am new to Service Portal and working on a custom portal widget where no record producer created instead all code are written in html for all fields of the form. like below

find_real_file.png

find_real_file.png

 

I have simply created 

<div class="row">
<label>Select a file: <input type="file" name="myFile"><br><br>

</div>

As i don't have idea how to create this, some code will helpful to me to achieve this?

Please help.

i want to create an attachment to upload passport images or files in the form and after submitting the form it should show in ticket as well.

 

Regards,

Manmath

 

 

 

5 REPLIES 5

Akhil Kumar1
Mega Sage

Please use the OOB attachment widget. for more details click on the below URL.

https://community.servicenow.com/community?id=community_question&sys_id=137e937e1ba0c098ada243f6fe4b...

 

You can use OOB Directive also

<sp-attachment-button>

https://community.servicenow.com/community?id=community_question&sys_id=68e4832ddbd8dbc01dcaf3231f96...

Hi Akhil,

In html i wrote as below

<div class="att-group">
File: <input type="file" id="fileToUpload" multiple onchange="angular.element(this).scope().setFiles(this)"/>
<br/> <div ng-show="files.length">
<div ng-repeat="file in files.slice(0)">
<span>{{file.webkitRelativePath || file.name}}</span>
(<span ng-switch="file.size > 1024*1024">
<span ng-switch-when="true">{{file.size / 1024 / 1024 | number:2}} MB</span>
<span ng-switch-default>{{file.size / 1024 | number:2}} kB</span>
</span>)<span class="glyphicon glyphicon-remove-circle" id="removeicon" ng-click="removeFiles(file)"></span>
<div ng-if="data.upLoadAtt" ng-init="uploadFiles()">
</div>
</div>
</div>
</div>

 

but in client script and sever script what i will write to achieve this?

 

Please suggest.

Regards,

manmath

Omkar Mone
Mega Sage

Hi 

Sorry for putting this up a bit late- 

Please find the below code which will attach your files in the backend (you can check the sys_attachment table).

 

HTML -

<div>
Select File : <sp-attachment-button></sp-attachment-button>
</div>

 

Client Script - 

function($scope, $http, spScUtil, spUtil, nowAttachmentHandler, $rootScope, $sanitize, $window, $sce, i18n, $timeout, $log, spAriaUtil, $document, spModal) {
  /* widget controller */
  var c = this;
	
	
	$scope.stickyHeaderTop = '0px';
		$scope.$on('dialog.upload_too_large.show', function(e){
		$log.error($scope.m.largeAttachmentMsg);
		spUtil.addErrorMessage($scope.m.largeAttachmentMsg);
	});
	
	$scope.m = $scope.data.msgs;
	var ah = $scope.attachmentHandler = new nowAttachmentHandler(setAttachments, appendError);
	function appendError(error) {
		spUtil.addErrorMessage(error.msg + error.fileName);
	}
	ah.setParams($scope.data._attachmentTable, $scope.data.recordID, 1024 * 1024 * $scope.data.maxAttachmentSize);
	function setAttachments(attachments, action) {
		$scope.attachments = attachments;
		if (action === "added")
			{
				console.log("added");
				c.server.update();
			}
			
		if (action === "renamed"){
			console.log("remaned");
			spAriaUtil.sendLiveMessage($scope.m.renameSuccessMsg);
			c.server.update();
		}
		if (action === "deleted"){
			console.log("deleted");
			spAriaUtil.sendLiveMessage($scope.m.deleteSuccessMsg);
			c.server.update();
		}
	}
	$scope.attachmentHandler.getAttachmentList();

	$scope.confirmDeleteAttachment = function(attachment, $event) {
    $rootScope.$broadcast("dialog.delete_attachment.show", {
      parms: {
        ok: function() {
          $scope.attachmentHandler.deleteAttachment(attachment);
          $rootScope.$broadcast("dialog.delete_attachment.close");
        },
        cancel: function() {
          $rootScope.$broadcast("dialog.delete_attachment.close");
        },
        details: attachment.name
      }
    })
  }
	
	$timeout(function() {
        if ($document[0].getElementsByClassName('sc-sticky-item-header').length > 0) {
            var titleHeight = $document[0].getElementsByClassName('sc-sticky-item-header')[0].clientHeight;
            $scope.stickyHeaderTop = '-' + (titleHeight - 20 - $document[0].getElementsByClassName('sc-cat-item-short-description')[0].clientHeight) + 'px;';
        }
    });
	
	$scope.$on('sp_loading_indicator', function(e, value) {
   $scope.loadingIndicator = value;
   });
	
	
	
	
}

 

Server Script - 

(function() {
  /* populate the 'data' object */
  /* e.g., data.table = $sp.getValue('table'); */

	data._attachmentTable = "sc_req_item";//here put your table
	data.recordID = "46d91e8bdb800010feeb47823996190d";// this sys_id is of my instance, put your record or req sys_id so that it will be seen in REQ as well
	
	
})();

 

Hope this helps.

 

Regards,

Omkar Mone

@Omkar Mukesh Mone - I want to do something similar, but instead of uploading the file to a table, I want the file to trigger a transform map