Migrate inline images to VSTS

Lately I have been planning a number of migrations to move small/big companies from TFS on-premises to Visual Studio Team Services (VSTS).

There are a number of options to migrate data from TFS to VSTS, but option 3 [high-fidelity database migration] is unfortunately not yet available. So, most of the time I still use custom/third-party tooling to perform the migration which is not always straightforward and may be very time-consuming.

One serious issue that popped up in a migration towards VSTS (using the TFS Integration Tools), was that the inline images in the Description field (or other html fields) of migrated work items were not properly migrated. The inline images are actually still referring to the old TFS on-premises environment because the html value of the Description field contains an <img> element with a source set to http://<tfs-on-prem>:8080/tfs/<tpc>/workitemtracking/v1.0/attachfilehandler.ashx?filenameguid=<guid>&filename=<filename>.png.

As a result, all inline images are only stored in the old TFS environment and they have not been uploaded to VSTS. The html value of the Description field has been migrated as-is. Initially you might not notice this after the migration of the selected work items because as long as the old TFS environment is still available, the inline image will be displayed. But what if the old TFS environment has been archived/destroyed?

To correct this and to upload the original images to VSTS, I have written some code (TFS API) to loop over the VSTS work items to detect image links to the old TFS environment. Using the source link of the original image, I can download the image to my local disk and upload it as an attachment to the VSTS work item. Finally, I’m replacing the original image source link with the new VSTS image link. Good to know is that once in-line images are detected inside the html field, those images are stored on the server and the temporary image file attachments may be deleted as well.

 

Advertisements

3 Responses to Migrate inline images to VSTS

  1. David Kolb says:

    Where can we find status on the high fidelity migration tool that is now overdue? Thanks!

  2. ravi says:

    How to check whether the image is already exist with FileNameGuid?
    or Where it is stored?

  3. Nikhil Gupta says:

    Hi there it seems while this code works perfect as you would expect, there is a problem when those images have to be rendered back into the native work item view control inbuilt into Team Explorer. The Work Item web view in VSTS renders the images perfectly but the Team Explorer view does not. On using Fiddler I noticed that when Team Explorer based view tried rendering the images, it recieved a 301 not found from VSTS AttachFiles.ashx handler. It further appears that the HTMLFieldControl which is respsonsible for rendering these images is not sending the right cookies and hence is getting auth denied. Can you please help?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: