آپلود رسانه
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
چندین روش API از آپلود رسانه علاوه بر یک بدنه معمولی پشتیبانی می کنند. در آن صورت، روش درخواست منظم بیش از حد بارگذاری می شود تا یک Stream
اضافی برای آپلود دریافت شود.
نمای کلی
برای هر Stream
که میخواهید آپلود کنید، باید از بارگذاری مجدد رسانه استفاده کنید، که اجازه میدهد جریانها در تکههای کوچکتر آپلود شوند. این به ویژه در صورتی مفید است که فایلهای بزرگی را انتقال میدهید و احتمال قطع شدن شبکه یا سایر خرابیهای انتقال زیاد است. همچنین می تواند استفاده از پهنای باند شما را در صورت خرابی شبکه کاهش دهد زیرا مجبور نیستید بارگذاری فایل های بزرگ را از ابتدا مجدداً راه اندازی کنید.
Resumable Media Upload از نسخه 1.2.0-بتا یک ویژگی در کتابخانه سرویس گیرنده Google API .NET بوده است. کتابخانههای مخصوص Google API حاوی روشهای راحت برای تعامل با این ویژگی هستند.
پروتکل بارگذاری رسانه قابل ازسرگیری، به عنوان مثال، در صفحه بارگذاری رسانه برای Drive API توضیح داده شده است. کلاس اصلی مورد علاقه ResumableUpload
است. در این پیاده سازی، محتوای رسانه به صورت تکه ای آپلود می شود.
اندازه پیشفرض قطعه 10 مگابایت است، اما میتوانید با تنظیم ویژگی ChunkSize
در درخواست روی هر مضربی از 256 کیلوبایت، آن را تغییر دهید. اگر در یک درخواست با خطای سرور مواجه شد، از سیاست عقب نشینی نمایی برای ارسال مجدد بایت هایی که با موفقیت آپلود نشده اند استفاده می شود. به طور پیش فرض، عقب نشینی نمایی برای هر درخواست مشتری فعال است. میتوانید با تغییر ویژگی DefaultExponentialBackOffPolicy
در BaseClientService.Initializer
و/یا تنظیم ویژگی HttpClientInitializer
برای پیادهسازی خودتان از IConfigurableHttpClientInitializer
، رفتار پیشفرض را هنگامی که یک شیء سرویس جدید ایجاد میکنید، تغییر دهید.
روشهایی که از آپلود رسانه پشتیبانی میکنند، در مستندات مرجع برای اسناد خاص API مشخص شدهاند. برای این روشهای API، روشهای Upload
و UploadAsync
آسان اضافه شدهاند. این روشها از یک Stream
برای آپلود و نوع محتوای آن به عنوان پارامتر استفاده میکنند.
مطمئن شوید که موقعیت جریانی که آپلود می کنید 0 باشد، در غیر این صورت با خطایی مانند "System.InvalidOperationException: سرصفحه داده شده یافت نشد" دریافت خواهید کرد.
توجه داشته باشید که به دلیل رفتار کلاس HttpClient
چارچوب، اگر زمان آپلود تمام شود، TaskCanceledException
پرتاب می شود. اگر این استثنا را مشاهده کردید، به طور دستی ویژگی Timeout
را در کلاینت مورد استفاده توسط شی سرویس خود افزایش دهید.
کد نمونه
// Create the service using the client credentials.
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Application_Name"
});
using var uploadStream = System.IO.File.OpenRead("Local_File_Name");
// Create the File resource to upload.
Google.Apis.Drive.v3.Data.File driveFile = new Google.Apis.Drive.v3.Data.File
{
Name = "Drive_File_Name"
};
// Get the media upload request object.
FilesResource.CreateMediaUpload insertRequest = service.Files.Create(
driveFile, uploadStream, "image/jpeg");
// Add handlers which will be notified on progress changes and upload completion.
// Notification of progress changed will be invoked when the upload was started,
// on each upload chunk, and on success or failure.
insertRequest.ProgressChanged += Upload_ProgressChanged;
insertRequest.ResponseReceived += Upload_ResponseReceived;
await insertRequest.UploadAsync();
static void Upload_ProgressChanged(IUploadProgress progress) =>
Console.WriteLine(progress.Status + " " + progress.BytesSent);
static void Upload_ResponseReceived(Google.Apis.Drive.v3.Data.File file) =>
Console.WriteLine(file.Name + " was uploaded successfully");
جز در مواردی که غیر از این ذکر شده باشد،محتوای این صفحه تحت مجوز Creative Commons Attribution 4.0 License است. نمونه کدها نیز دارای مجوز Apache 2.0 License است. برای اطلاع از جزئیات، به خطمشیهای سایت Google Developers مراجعه کنید. جاوا علامت تجاری ثبتشده Oracle و/یا شرکتهای وابسته به آن است.
تاریخ آخرین بهروزرسانی 2025-07-24 بهوقت ساعت هماهنگ جهانی.
[null,null,["تاریخ آخرین بهروزرسانی 2025-07-24 بهوقت ساعت هماهنگ جهانی."],[[["\u003cp\u003eSome API methods allow uploading media using resumable media upload, enabling the transfer of large files in smaller chunks, reducing bandwidth usage, and minimizing interruptions.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eResumableUpload\u003c/code\u003e class facilitates resumable media uploads with a default chunk size of 10MB, adjustable to multiples of 256KB, and includes exponential backoff for error handling.\u003c/p\u003e\n"],["\u003cp\u003eConvenience methods \u003ccode\u003eUpload\u003c/code\u003e and \u003ccode\u003eUploadAsync\u003c/code\u003e are available for API methods supporting media upload, accepting a stream and its content type as parameters, ensuring the stream's position is at 0 to avoid errors.\u003c/p\u003e\n"],["\u003cp\u003eConsider increasing the \u003ccode\u003eHttpClient\u003c/code\u003e timeout property to prevent \u003ccode\u003eTaskCanceledException\u003c/code\u003e during prolonged uploads, as demonstrated in the provided sample code.\u003c/p\u003e\n"],["\u003cp\u003eResumable media upload functionality is accessible through the Google API .NET client library, offering detailed documentation and progress tracking capabilities.\u003c/p\u003e\n"]]],[],null,["# Upload Media\n\nSeveral API methods support uploading media in addition to a regular body.\nIn that case, the regular request method is overloaded to get an additional\n`Stream` to upload.\n\nOverview\n--------\n\n\nFor any `Stream` you wish to upload, you should use resumable\nmedia upload, which allows streams to be uploaded in smaller chunks.\nThis is especially useful if you are transferring large files,\nand the likelihood of a network interruption or some other transmission\nfailure is high.\nIt can also reduce your bandwidth usage in the event of network failures\nbecause you don't have to restart large file uploads from the beginning.\n\nResumableMediaUpload\n--------------------\n\n\nResumable Media Upload has been a feature in the Google API .NET client library\nsince 1.2.0-beta.\nThe Google API-specific libraries contain convenience methods for\ninteracting with this feature.\n\n\nThe resumable media upload protocol is described, for example, on the\n[media upload page for the Drive API](https://developers.google.com/drive/manage-uploads#resumable).\nThe main class of interest is\n[`ResumableUpload`](https://googleapis.dev/dotnet/Google.Apis/latest/api/Google.Apis.Upload.ResumableUpload.html).\nIn this implementation, the media content is uploaded in chunks.\n\n\nThe default chunk size is 10MB, but you can change it by\nsetting the `ChunkSize` property on the request to any multiple of 256KB.\nIf a server error is encountered in a request then exponential backoff\npolicy is used to resend the bytes that were not successfully uploaded.\nBy default, exponential backoff is enabled for each client request.\nYou can change the default behavior when you construct\na new service object by changing the\n[`DefaultExponentialBackOffPolicy`](https://googleapis.dev/dotnet/Google.Apis/latest/api/Google.Apis.Services.BaseClientService.Initializer.html#Google_Apis_Services_BaseClientService_Initializer_DefaultExponentialBackOffPolicy) property on `BaseClientService.Initializer`\nand/or setting the\n[`HttpClientInitializer`](https://googleapis.dev/dotnet/Google.Apis/latest/api/Google.Apis.Services.BaseClientService.Initializer.html#Google_Apis_Services_BaseClientService_Initializer_HttpClientInitializer)\nproperty to your own implementation of `IConfigurableHttpClientInitializer`\nthat adds some backoff policy.\n\n\nThe methods that support media upload are identified\nin the reference documentation for the API-specific documentation.\nFor these API methods, convenience `Upload` and\n`UploadAsync` methods are added.\nThose methods take a `Stream` to upload and its content type as parameters.\n\n\nMake sure that the position of the stream you upload is 0, otherwise you will receive an error, such as\n\"System.InvalidOperationException: The given header was not found\".\n\n\nNote that due to the behavior of the framework's `HttpClient`\nclass, if the upload times out, a `TaskCanceledException` is thrown.\nIf you see this exception, consider manually increasing the `Timeout` property in\nthe client used by your service object.\n\nSample Code\n-----------\n\n```gdscript\n// Create the service using the client credentials.\nvar service = new DriveService(new BaseClientService.Initializer()\n{\n HttpClientInitializer = credential,\n ApplicationName = \"Application_Name\"\n});\n\nusing var uploadStream = System.IO.File.OpenRead(\"Local_File_Name\");\n\n// Create the File resource to upload.\nGoogle.Apis.Drive.v3.Data.File driveFile = new Google.Apis.Drive.v3.Data.File\n{\n Name = \"Drive_File_Name\"\n};\n// Get the media upload request object.\nFilesResource.CreateMediaUpload insertRequest = service.Files.Create(\n driveFile, uploadStream, \"image/jpeg\");\n\n// Add handlers which will be notified on progress changes and upload completion.\n// Notification of progress changed will be invoked when the upload was started,\n// on each upload chunk, and on success or failure.\ninsertRequest.ProgressChanged += Upload_ProgressChanged;\ninsertRequest.ResponseReceived += Upload_ResponseReceived;\n\nawait insertRequest.UploadAsync();\n\nstatic void Upload_ProgressChanged(IUploadProgress progress) =\u003e\n Console.WriteLine(progress.Status + \" \" + progress.BytesSent);\n\nstatic void Upload_ResponseReceived(Google.Apis.Drive.v3.Data.File file) =\u003e\n Console.WriteLine(file.Name + \" was uploaded successfully\");\n```"]]