پرش به مستندات
Ruby

فایل‌ها

`files.list`، `list_all`، `iterate`، `get`، `download`، `list_links`، `list_all_links`، `iterate_links`، `create_link`، `revoke_link`، `stats`، `upload`، `delete` و `delete_many`.

همهٔ متدها

files.rb
page = client.files.list(kind: "pdf", sort: "largest")file = page.items.first links = client.files.list_all_links(file[:id])p links.map { |link| [link[:url], link[:downloads]] } stats = client.files.statsputs stats.dig(:totals, :files), stats.dig(:uploaded, :bytes) File.binwrite(file[:filename], client.files.download(file[:id]))

همهٔ فایل‌هایی که صندوق پستی نگه می‌دارد، پیوست‌های فرستاده و دریافت‌شده و فایل‌هایی که در آن بارگذاری شده‌اند: صفحهٔ «فایل‌ها» در برنامه. download بایت‌ها را به‌صورت یک String دودویی برمی‌گرداند که File.binwrite آن را بی‌تغییر ذخیره می‌کند. پیوندها همان پیوندهای دانلودی‌اند که فایل با آن‌ها فرستاده شده، همراه با اینکه هرکدام چند بار گرفته شده، و stats زبانهٔ «تحلیل» است.

list، list_all و iterate، q:، kind: و sort: را می‌گیرند، و همچنین direction: (inbound، outbound یا uploaded)، address:، یعنی فایل‌های یک نشانی که بدون توجه به بزرگی و کوچکی حروف مقایسه می‌شود، و since: و until:، یک Time، یک DateTime یا یک String با قالب ISO 8601. since: لحظهٔ خودش را شامل می‌شود و until: پیش از لحظهٔ خودش می‌ایستد. Date در Ruby به‌صورت تاریخ خالی فرستاده می‌شود، که این فهرست آن را نیمه‌شب UTC می‌خواند.

q: در نام فایل و نوع آن جست‌وجو می‌کند. kind: یکی از image، pdf، audio، video یا text است، و sort: یکی از newest (پیش‌فرض)، oldest، largest یا name. OpenEmail::FILE_KINDS، OpenEmail::FILE_SORTS و OpenEmail::FILE_DIRECTIONS گزینه‌ها را نام می‌برند. list یک OpenEmail::Page برمی‌گرداند، و list_all همهٔ فایل‌ها را در یک Array برمی‌گرداند. iterate هر فایل را به یک بلاک yield می‌کند و صفحهٔ بعد را فقط وقتی حلقه به آن نیاز دارد می‌گیرد. بدون بلاک یک Enumerator برمی‌گرداند.

خواندن به files:read نیاز دارد، و بارگذاری، حذف و انتشار یا باطل کردن پیوندها به files:write نیاز دارند، که files:read را هم در بر دارد. به کلیدی که پیش از آنکه فایل‌ها اسکوپ‌های خودشان را داشته باشند ساخته شده، اسکوپ‌های متناظر داده شد. کلیدی که این اسکوپ را ندارد با یک 403 insufficient_scope رد می‌شود، و scope_missing? روی خطا true است. کلیدی که به نشانی‌ها یا دامنه‌های خاصی محدود است فقط فایل‌هایی را می‌بیند که به همان‌ها رسیده‌اند، پس فایل‌هایی را که برای کل فضای کاری بارگذاری شده‌اند نمی‌بیند.

download کل فایل را در حافظه نگه می‌دارد، پس فایل‌های بسیار بزرگ را یکی‌یکی بگیرید.

بارگذاری و حذف

upload.rb
upload = client.files.upload(File.binread("report.pdf"), filename: "report.pdf", content_type: "application/pdf")client.files.delete(upload[:id]) if upload[:deletable] invoice = client.files.upload(Pathname("invoice.pdf"))puts invoice[:filename], invoice[:mimeType] result = client.files.delete_many(["file_0c4e7a91d2b84f63a5e19b7d", "file_6bb640f5b99e47deb758f1f5"])result[:kept].each { |kept| puts "#{kept[:filename]} #{kept[:reason]}" }

upload بایت‌ها را همان‌طور که هستند، تا 100 MB، با نامی که در filename: آمده ذخیره می‌کند و فایل را برمی‌گرداند. یک ارسال آن را به‌صورت {fileId: upload[:id]} در attachments متد emails.send پیوست می‌کند. content_type: را بدهید، یا بایت‌هایی که نوع خودشان را دارند، و هر چیز دیگری به‌صورت application/octet-stream ذخیره می‌شود. هرگز دوباره امتحان نمی‌شود، چون تلاش دوم نسخهٔ دومی را ذخیره می‌کرد.

بایت‌ها یک String دودویی، یک IO یا یک Pathname هستند. یک Pathname یا File به هیچ‌کدام از دو کلیدواژه نیاز ندارد: نام، نام خودِ فایل است، و نوع از پسوند آن می‌آید وقتی gem آن را بشناسد، مانند .pdf یا .png. فایل بارگذاری‌شده در Rails original_filename و content_type خودش را می‌آورد. بایت‌های ساده نامی ندارند، پس یک String یا StringIO بدون filename: پیش از فرستادن هر چیزی ArgumentError را raise می‌کند.

یک بارگذاری می‌تواند 600 ثانیه طول بکشد، یا به اندازهٔ timeout کلاینت وقتی آن بیشتر باشد، و timeout: برای یک فراخوانی محدودیت دیگری تعیین می‌کند. کلاینتی که با timeout: 0 ساخته شده به هر اندازه که بارگذاری طول بکشد منتظر می‌ماند.

فقط بارگذاری‌ای را می‌توان حذف کرد که هیچ چیزی به آن وابسته نباشد، و deletable و usage روی هر فایل این را از پیش می‌گویند. delete هر فایل دیگری را با یک 409 file_in_use رد می‌کند که به‌صورت OpenEmail::ConflictError raise می‌شود. delete_many تا 100 شناسه می‌گیرد، هر چه را بتواند حذف می‌کند، و بقیه را در kept، هرکدام با دلیلش، و در missing گزارش می‌کند. هیچ‌کدام دوباره امتحان نمی‌شوند. یک 404 در delete دوم پس از پاسخی گم‌شده یعنی اولی کار کرده است، و delete_many دوم آن فایل‌ها را در missing گزارش می‌کند.