I've got image data in base64 strings and want to set user avatars to that image. e.g.
data:image/jpg;base64,/9j/4AA... ...KR//9k=
My current code runs without error and appears to work, except the image isn't loaded correctly. The current avatar is replaced with
What I'm doing is
Pattern reImage = Pattern.compile('^data\\:(.*?);base64,(.*)$')
def m4 = reImage.matcher(imageraw)
if (m4) {
String imageType = m4[0][1]
String imageB64 = m4[0][2]
byte[] imageBA = imageB64.decodeBase64()
ByteArrayInputStream bais = new ByteArrayInputStream(imageBA)
BufferedImage image = ImageIO.read(bais)
bais.close()
//I've cropped, resized and saved the image and it all works. This tells me the BufferedImage is loaded well
imageFileName = 'somefile.ext' // logic is a bit more complex but this will do for the example
Avatar newAvatar = avatarManager.create(
imageFileName,
imageType,
IconType.USER_ICON_TYPE,
new IconOwningObjectId(user.id.toString()),
new ByteArrayInputStream(imageBA),
null) //I've also tested with a non null Selection
//The returned avatar has a non 0 id, and other values are as expected
avatarService.setCustomUserAvatar(currentUser,user,newAvatar.id)
}
Disregard figured it out. Problem was the user.
Where you have
new IconOwningObjectId(user.id.toString())
It should be:
new IconOwningObjectId(user.getUsername())
Provided user is of type ApplicationUser
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
import com.atlassian.jira.avatar.Avatar
import com.atlassian.jira.avatar.AvatarManager
import com.atlassian.jira.avatar.AvatarService
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.icon.IconType
import com.atlassian.jira.icon.IconOwningObjectId
ApplicationUser user = ComponentAccessor.getUserManager().getUserByName("bill")
def fileName = "bill.png"
File file = new File("/data/atlassian/application-data/jira/scripts/data/bill.png")
def contentType = AvatarManager.PNG_CONTENT_TYPE
IconType iconType = IconType.USER_ICON_TYPE
IconOwningObjectId owner = new IconOwningObjectId(user.getUsername())
BufferedInputStream iStream = new BufferedInputStream(new FileInputStream(file))
AvatarManager avatarManager = ComponentAccessor.getAvatarManager()
Avatar avatar = avatarManager.create(fileName, contentType, iconType, owner, iStream, null)
AvatarService avatarService = ComponentAccessor.getAvatarService()
avatarService.setCustomUserAvatar(user, user, avatar.getId())
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Scott,
good and useful script!
Anyway I had to subsitute
new IconOwningObjectId(user.getUsername())
with
new IconOwningObjectId(user.getKey())
With this expedient your script worked like a charm!
Thanks,
Alberto
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.