Unggah Foto Atau File Ke Foto Google Menggunakan API Foto Google, REST Dan C # .NET

  • Whatsapp
Unggah Foto Atau File Ke Foto Google Menggunakan API Foto Google, REST Dan C # .NET

Selamat pagi!

Saya menulis aplikasi konsol sebelumnya yang membaca item media dari Foto Google menggunakan API Foto Google, C # Dan REST. Aplikasi konsol itu adalah dasar dari salah satu proyek saya menggunakan API klien dunia nyata. Namun, proyek itu terbatas hanya untuk membaca file dan tidak memiliki kemampuan unggah. Sekarang saya bebas dengan proyek di tempat kerja, saatnya untuk mengunjungi kembali API Foto Google dan membuat aplikasi konsol sederhana yang akan mengunggah foto / gambar atau file ke Foto Google menggunakan REST, API Foto Google dan C #.

Bacaan Lainnya

Jadi untuk memulai, pastikan Anda telah membaca dokumentasi untuk menyiapkan API di sini Mulailah dengan REST. Setelah Anda berhasil menyiapkan API, unduh file JSON yang berisi kredensial Anda secara khusus Rahasia Klien dan ID Klien dan tambahkan file tersebut ke proyek aplikasi konsol Anda. Pastikan untuk menyetel Salin ke Direktori Output dari file JSON ke Salin selalu di Penjelajah Solusi Visual Studio. Tambahkan juga Paket Nuget ini Google.Apis, Google.Apis.Auth dan Google.Apis.Core karena mereka akan digunakan untuk mengautentikasi aplikasi konsol Anda saat mengakses cloud Google Foto.
Metode utama aplikasi konsol adalah mendapatkan file yang akan diunggah dari direktori yang ada, mengatur cakupan aplikasi untuk membuat item media dan mengunggah dalam byte yang mana appendonly dan melakukan otorisasi dan otentikasi aplikasi Anda. Ini kemudian akan memanggil metode mengunggah file yang akan melewati direktori, objek UserCredential dan file yang diambil.

static void Main(string[] args)
{
string UserName = "[email protected]";
string credPath = @"D:CodesGooglePhotosUpload";
string filesRepository = @"D:FilesToUploadFolder";
string[] files = Directory.GetFiles(filesRepository);
UserCredential credential;
string[] scopes = {
"https://www.googleapis.com/auth/photoslibrary.appendonly"
};



using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
{
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
scopes,
UserName,
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
}

try
{
if (files.Length > 0)
{
UploadFileWebRequest(filesRepository, credential, files);
}
}
catch (Exception ex)
{
Console.WriteLine("Error occured: " + ex.Message);
}

Console.WriteLine("Files Uploaded Successfully!!!");
Console.ReadLine();
}
Metode upload file loop melalui file dan membuat objek tugas untuk setiap file individu yang pada gilirannya akan mengirim permintaan POST ke API bersama dengan header permintaan POST yang ditentukan dalam dokumentasi ini Unggah Media. Jika pengeposan file berhasil, maka akan mengembalikan upload-token untuk file itu yang akan digunakan untuk membuat item media itu di cloud. Saya menambahkan token unggah bersama dengan nama file ke kamus yang akan digunakan untuk membuat item media. Selanjutnya adalah membuat string JSON yang berisi item media untuk didorong ke cloud yang mengikuti format yang ditentukan dalam dokumentasi di atas . Objek permintaan terpisah dibuat termasuk url dan header yang benar yang akan mengunggah item media ke cloud.

private static void UploadFileWebRequest(string filesRepository, UserCredential credential, string[] fileNames)
{
string jsonData = string.Empty;
List<Task> tasks = new List<Task>();
Dictionary<string, string> fileUploads = new Dictionary<string, string>();

//Get upload-token
foreach (var fileName in fileNames)
{
var task = new Task(() =>
{
byte[] byteArr = File.ReadAllBytes(Path.Combine(filesRepository, Path.GetFileName(fileName)));

var request = WebRequest.Create("https://photoslibrary.googleapis.com/v1/uploads");
request.Method = "POST";
request.Headers.Add("Authorization:" + credential.Token.TokenType + " " + credential.Token.AccessToken);
request.Headers.Add("X-Goog-Upload-Content-Type", "raw");
request.Headers.Add("X-Goog-Upload-Content-Type", "image/jpeg");
request.Headers.Add("X-Goog-Upload-File-Name", Path.GetFileName(fileName));
request.ContentType = "application/octet-stream";
request.ContentLength = byteArr.Length;
request.Credentials = CredentialCache.DefaultCredentials;

Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArr, 0, byteArr.Length);
dataStream.Close();

WebResponse response = request.GetResponse();
using (dataStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(dataStream);
string uploadToken = reader.ReadToEnd();
fileUploads.Add(Path.GetFileName(fileName), uploadToken);
}

response.Close();
});

tasks.Add(task);
task.Start();
}

Task.WaitAll(tasks.ToArray());

//Prepare to create media items
jsonData = "{";
jsonData += ""newMediaItems": [";
foreach (var fileUpload in fileUploads)
{
jsonData += "{";
jsonData += ""description": "" + Path.GetFileName(fileUpload.Key) + """ + ",";
jsonData += ""simpleMediaItem": {";
jsonData += ""fileName": "" + Path.GetFileName(fileUpload.Key) + """ + ",";
jsonData += ""uploadToken": "" + fileUpload.Value + """;
jsonData += "}";
jsonData += "},";
}
jsonData += "]";
jsonData += "}";
jsonData = jsonData.Remove(jsonData.Length - 3, 1);

var requestUpload = WebRequest.Create("https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate");
requestUpload.ContentType = "application/json";
requestUpload.Method = "POST";
requestUpload.Credentials = CredentialCache.DefaultCredentials;
requestUpload.Headers.Add("Authorization:" + credential.Token.TokenType + " " + credential.Token.AccessToken);

using (var streamWriter = new StreamWriter(requestUpload.GetRequestStream()))
{
streamWriter.Write(jsonData.ToString());
}

try
{
var httpResponse = (HttpWebResponse)requestUpload.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
}
catch (WebException ex)
{
using (WebResponse responseError = ex.Response)
{
var httpResponse = (HttpWebResponse)responseError;

using (Stream data = responseError.GetResponseStream())
{
StreamReader sr = new StreamReader(data);
Console.WriteLine(sr.ReadToEnd());
}
}
}
}
Setelah semuanya diatur dengan benar dan kode tidak memiliki kesalahan selama mode debug, itu akan membuka browser Internet Explorer atau Microsoft Edge yang meminta Anda untuk masuk ke Google Foto menggunakan akun Anda dan mengotorisasi aplikasi Anda untuk dapat mengunggah item media. Ini kemudian akan mengunduh kode verifikasi ke aplikasi Anda.
Unggah Foto Atau File Ke Foto Google Menggunakan API Foto Google, REST Dan C # .NET
Unggah Foto Atau File Ke Foto Google Menggunakan API Foto Google, REST Dan C # .NET
Untuk memverifikasi apakah mengunggah item media atau jika file berhasil diunggah, buka Foto Google dan masuk menggunakan akun gmail Anda. Anda harus dapat melihat file Anda disimpan ke foto cloud. Berikut kode sumber lengkap dari aplikasi konsol.

using Google.Apis.Auth.OAuth2;
using Google.Apis.Util.Store;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading;
using System.Threading.Tasks;

namespace GooglePhotosUpload
{
class Program
{
static void Main(string[] args)
{
string UserName = "[email protected]";
string credPath = @"D:CodesGooglePhotosUpload";
string filesRepository = @"D:FilesToUploadFolder";
string[] files = Directory.GetFiles(filesRepository);

UserCredential credential;
string[] scopes = {
"https://www.googleapis.com/auth/photoslibrary.appendonly"
};


using (var stream = new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
{
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
scopes,
UserName,
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
}

try
{
if (files.Length > 0)
{
UploadFileWebRequest(filesRepository, credential, files);
}
}
catch (Exception ex)
{
Console.WriteLine("Error occured: " + ex.Message);
}

Console.WriteLine("Files Uploaded Successfully!!!");
Console.ReadLine();
}

private static void UploadFileWebRequest(string filesRepository, UserCredential credential, string[] fileNames)
{
string jsonData = string.Empty;
List<Task> tasks = new List<Task>();
Dictionary<string, string> fileUploads = new Dictionary<string, string>();

//Get upload-token
foreach (var fileName in fileNames)
{
var task = new Task(() =>
{
byte[] byteArr = File.ReadAllBytes(Path.Combine(filesRepository, Path.GetFileName(fileName)));

var request = WebRequest.Create("https://photoslibrary.googleapis.com/v1/uploads");
request.Method = "POST";
request.Headers.Add("Authorization:" + credential.Token.TokenType + " " + credential.Token.AccessToken);
request.Headers.Add("X-Goog-Upload-Content-Type", "raw");
request.Headers.Add("X-Goog-Upload-Content-Type", "image/jpeg");
request.Headers.Add("X-Goog-Upload-File-Name", Path.GetFileName(fileName));
request.ContentType = "application/octet-stream";
request.ContentLength = byteArr.Length;
request.Credentials = CredentialCache.DefaultCredentials;

Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArr, 0, byteArr.Length);
dataStream.Close();

WebResponse response = request.GetResponse();
using (dataStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(dataStream);
string uploadToken = reader.ReadToEnd();
fileUploads.Add(Path.GetFileName(fileName), uploadToken);
}

response.Close();
});

tasks.Add(task);
task.Start();
}

Task.WaitAll(tasks.ToArray());

//Prepare to create media items
jsonData = "{";
jsonData += ""newMediaItems": [";
foreach (var fileUpload in fileUploads)
{
jsonData += "{";
jsonData += ""description": "" + Path.GetFileName(fileUpload.Key) + """ + ",";
jsonData += ""simpleMediaItem": {";
jsonData += ""fileName": "" + Path.GetFileName(fileUpload.Key) + """ + ",";
jsonData += ""uploadToken": "" + fileUpload.Value + """;
jsonData += "}";
jsonData += "},";
}
jsonData += "]";
jsonData += "}";
jsonData = jsonData.Remove(jsonData.Length - 3, 1);

var requestUpload = WebRequest.Create("https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate");
requestUpload.ContentType = "application/json";
requestUpload.Method = "POST";
requestUpload.Credentials = CredentialCache.DefaultCredentials;
requestUpload.Headers.Add("Authorization:" + credential.Token.TokenType + " " + credential.Token.AccessToken);

using (var streamWriter = new StreamWriter(requestUpload.GetRequestStream()))
{
streamWriter.Write(jsonData.ToString());
}

try
{
var httpResponse = (HttpWebResponse)requestUpload.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
}
}
catch (WebException ex)
{
using (WebResponse responseError = ex.Response)
{
var httpResponse = (HttpWebResponse)responseError;

using (Stream data = responseError.GetResponseStream())
{
StreamReader sr = new StreamReader(data);
Console.WriteLine(sr.ReadToEnd());
}
}
}
}
}
}

Pos terkait

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *