Can't retrieve image from Sharepoint list image column via Graph

SimonP555 0 Reputation points
2025-01-12T23:13:49.3933333+00:00

Hi there, I'm quite new to APIs and web requests, I usually just do desktop Python, so please go easy on me!

I have a Sharepoint list containing some text columns and an image column, where the image is added directly rather than as an attachment:
User's image

I am trying to download the image for a chosen list ID number (in this case, 257).

I have this code:

	def get_list_photo(self, save_path='output_image.jpg', item_id = '257'):
		response = requests.get(
			"https://graph.microsoft.com/v1.0/sites/(our sharepoint URL):/sites/SimonWork:/lists/(our list id)/items?expand=fields",
			headers=self.get_headers())
		if response.status_code == 200:
			data = response.json()
			for item in data.get('value', []):
				if item.get('id') == item_id:
					fields = item.get('fields', {})
					image_field = fields.get('Project_Image')
					print(f'Found item {item_id} with {image_field}')

					if image_field:
						file_info = json.loads(image_field)
						file_name = file_info.get('fileName')
						print(file_name)

						site_id = "(my site id)"
						list_id = "(my list id)"
						image_url = f"https://graph.microsoft.com/v1.0/sites/{site_id}/lists/{list_id}/items/{item_id}/driveItem/children/{file_name}/content"
						response = requests.get(image_url, headers=self.get_headers())
						if response.status_code == 200:
							with open(save_path, 'wb') as f:
								f.write(response.content)
							print(f"Image saved to {save_path}")
						else:
							logging.error(f"Failed to download image. Status code: {response.status_code}")
							logging.error(f"Response content: {response.json()}")
					else:
						logging.error(f"No image field found for item {item_id}")

So, the auth happens fine and it gets as far as printing the image file name, which is:
Reserved_ImageAttachment_[8][Project_Image][20][FB_IMG_1706224942777][1]_[7].jpg

But as soon as I make a request of the concatenated image URL, I get this:

ERROR:root:Failed to download image. Status code: 400 ERROR:root:Response content: {'error': {'code': 'invalidRequest', 'message': 'Cannot request driveItem for an item that is not in a document library', 'innerError': {'date': '2025-01-12T22:39:48', 'request-id': '3184c9f4-ddfe-4a75-900b-ecae094ee014', 'client-request-id': '3184c9f4-ddfe-4a75-900b-ecae094ee014'}}}

Can someone advise if there is a better way to make the request please?

Thanks

Simon

Microsoft Graph
Microsoft Graph
A Microsoft programmability model that exposes REST APIs and client libraries to access data on Microsoft 365 services.
13,001 questions
0 comments No comments
{count} votes

1 answer

Sort by: Most helpful
  1. Saranya Madhu-MSFT 1,425 Reputation points Microsoft Vendor
    2025-01-13T11:43:56.7233333+00:00

    Hi SimonP555,

    Thanks for reaching out to Microsoft!

    As per the documentation: The driveItem resource represents a file, folder, or other item stored in a drive.

    All file system objects in OneDrive and SharePoint are returned as driveItem resources. Items in SharePoint document libraries can be represented as listItem or driveItem resources.

    It looks like you're encountering an error because the item you're trying to access is not in a document library. The driveItem endpoint is specifically for items stored in document libraries.

    Download the Content: You can download the file content using the driveItem endpoint. Use the following endpoint to download the file:

    GET /sites/{site-id}/drive/items/{item-id}/content

    Hope this helps.

    If the answer is helpful, please click Accept Answer and kindly upvote. If you have any further questions about this answer, please click Comment


Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.