FranzHuber23
FranzHuber23

Reputation: 4262

Is it possible to get the download link with sharing option from GDrive API in C#?

I want to upload files to GDrive and get the download link for all users that have the link. Currently I managed to upload files and get the download link. But I don't know how to get the download link for all users. Can anyone help me with this, please?

Upvotes: 0

Views: 2503

Answers (2)

ram
ram

Reputation: 914

You have to edit the permission of the file to make it accessble for all user.

  • I have done the python version. C# will have the same implementation.
  • https://developers.google.com/sheets/api/quickstart/python
  • Use the above link to create a project and download client_secret.json.
  • Create a python file in the same location where the client_secret.json is located.
  • Then use the code below to upload and create sharable link.

Code:

from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
import multiprocessing as mp
import os
gauth = GoogleAuth()
# Creates local webserver and auto handles authentication.
gauth.LocalWebserverAuth()
drive = GoogleDrive(gauth)
#if there is any error in clent_secret.json try downloading it again after enabling drive api
#now the drive is accessible through python

#Lets create a folder named 'New_folder' in gdrive
file1 = drive.CreateFile({'title'   : 'New_folder',
                          'mimeType': "application/vnd.google-apps.folder"})
file1.Upload()
#it will create a folder in your drive 
#mimeType is an argument which specifies the type of file

#Now we have created a folder, lets see how to upload a file to the folder which we have created

#We need to obtain the Id of the folder which we have created in the previous steps 
folder_id = file1['id']

#lets upload an image to the folder
file2 = drive.CreateFile({'title':'filename.jpg',
                          'mimeType':'image/jpeg',
                          'parents': [{"kind": "drive#fileLink", "id": folder_id}]
#In parents argument above we need to specify the folder ID of the folder to which it has to be uploaded.
#mimeType is different for each file type, which are available in the google api documentation.

#specify the local path with the quotes in the below line
file2.SetContentFile('/home/username/Downloads/image.jpg')
file2.Upload()

#SET PERMISSION
permission = file2.InsertPermission({
                            'type': 'anyone',
                            'value': 'anyone',
                            'role': 'reader'})

#SHARABLE LINK
link=file2['alternateLink']

#To use the image in Gsheet we need to modify the link as follows
link=file2['alternateLink']
link=link.split('?')[0]
link=link.split('/')[-2]
link='https://docs.google.com/uc?export=download&id='+link
print link

Upvotes: 5

KENdi
KENdi

Reputation: 7741

It is stated in this documentation that Google Drive supports providing users direct access to a file via the URL in the webViewLink property.

Also, the Google Drive provides you a 3 ways to download a file.

Just remember that when you use webContentLink in downloading the file, this is only available for files with binary content in Drive.

To get the direct download link for a Google Drive file, you can go to the Google Drive developers API references and use their “try it!” API explorer form for the get API call. In the fileId textbox, just paste the file’s ID and in the fields textbox, just place webContentLink then click “Execute”. Below under response, in the generated JSON, the direct link that you need is called webContentLink and looks something like this:

"webContentLink": "https://docs.google.com/uc?id=0ByP7_A9vXm17TmRYcmNScnYzS1E&export=download"

For more information, check this thread.

Upvotes: 1

Related Questions