Erstellen Sie eine Uploadsitzung, die es einer App ermöglicht, Bereiche einer Datei iterativ hochzuladen, um die Datei an das angegebene Outlook-Element anzufügen. Das Element kann eine Nachricht oder ein Ereignis sein.
Verwenden Sie diesen Ansatz, um eine Datei anzufügen, wenn die Dateigröße zwischen 3 MB und 150 MB liegt. Um eine Datei anzufügen, die kleiner als 3 MB ist, führen Sie einen POST Vorgang für die Attachments-Navigationseigenschaft des Outlook-Elements aus. Informationen hierzu finden Sie für eine Nachricht oder für ein Ereignis.
Als Teil der Antwort gibt diese Aktion eine Upload-URL zurück, die Sie in nachfolgenden sequenziellen PUT Abfragen verwenden können. Mit Anforderungsheadern für jeden PUT Vorgang können Sie den genauen Bytesbereich angeben, der hochgeladen werden soll. Dadurch kann die Übertragung fortgesetzt werden, falls die Netzwerkverbindung während des Uploads unterbrochen wird.
Im Folgenden werden die Schritte zum Anfügen einer Datei an ein Outlook-Element mithilfe einer Uploadsitzung beschrieben:
Erstellen Sie eine Uploadsitzung.
Innerhalb dieser Uploadsitzung laden Sie Bytebereiche (bis zu 4 MB pro Mal) iterativ hoch, bis alle Bytes der Datei hochgeladen wurden und die Datei an das angegebene Element angefügt wird.
Speichern Sie die ID für die Anlage für den zukünftigen Zugriff.
Exchange Online können Administratoren den Grenzwert für die Nachrichtengröße für Microsoft 365-Postfächer anpassen, einschließlich aller Nachrichtenanlagen. Standardmäßig beträgt dieser Grenzwert für die Nachrichtengröße 35 MB. Erfahren Sie, wie Sie die maximale Nachrichtengröße anpassen , um Anlagen zu unterstützen, die den Standardgrenzwert für Ihren Mandanten überschreiten.
Wichtig
Beachten Sie ein bekanntes Problem , wenn Sie eine große Datei an eine Nachricht oder ein Ereignis in einem freigegebenen oder delegierten Postfach anfügen.
Wählen Sie für diese API die Als am wenigsten privilegierten Berechtigungen gekennzeichneten Berechtigungen aus. Verwenden Sie nur dann eine Berechtigung mit höheren Berechtigungen , wenn dies für Ihre App erforderlich ist. Ausführliche Informationen zu delegierten Berechtigungen und Anwendungsberechtigungen finden Sie unter Berechtigungstypen. Weitere Informationen zu diesen Berechtigungen finden Sie in der Berechtigungsreferenz.
Berechtigungstyp
Berechtigungen mit den geringsten Berechtigungen
Berechtigungen mit höheren Berechtigungen
Delegiert (Geschäfts-, Schul- oder Unikonto)
Calendars.ReadWrite
Mail.ReadWrite
Delegiert (persönliches Microsoft-Konto)
Calendars.ReadWrite
Mail.ReadWrite
Anwendung
Calendars.ReadWrite
Mail.ReadWrite
HTTP-Anforderung
So erstellen Sie eine Uploadsitzung zum Anfügen einer Datei an ein Ereignis:
POST /me/events/{id}/attachments/createUploadSession
POST /users/{id | userPrincipalName}/events/{id}/attachments/createUploadSession
So erstellen Sie eine Uploadsitzung zum Anfügen einer Datei an eine Nachricht:
POST /me/messages/{id}/attachments/createUploadSession
POST /users/{id | userPrincipalName}/messages/{id}/attachments/createUploadSession
Stellt Attribute des elements dar, das hochgeladen und angefügt werden soll. Geben Sie mindestens den Anlagentyp (file), einen Namen und die Größe der Datei an.
Antwort
Bei erfolgreicher Ausführung gibt die Methode den 201 Created Antwortcode und ein neues uploadSession-Objekt im Antworttext zurück.
Hinweis:
Die uploadUrl-Eigenschaft , die als Teil des uploadSession-Antwortobjekts zurückgegeben wird, ist eine nicht transparente URL für nachfolgende PUT Abfragen zum Hochladen von Bytebereichen der Datei. Es enthält das entsprechende Authentifizierungstoken für nachfolgende PUT Abfragen, die um expirationDateTime ablaufen. Passen Sie diese URL nicht an.
Die nextExpectedRanges-Eigenschaft gibt den Speicherort des nächsten Dateibytes an, aus dem hochgeladen werden soll, "NextExpectedRanges":["2097152"]z. B. . Sie müssen die Bytes einer Datei in der korrekten Reihenfolge hochladen.
Beispiele
Beispiel 1: Erstellen einer Uploadsitzung zum Hinzufügen einer großen Anlage zu einem Nachrichtenentwurf
Das folgende Beispiel zeigt, wie Sie eine Uploadsitzung erstellen, die Sie in nachfolgenden Dateiuploadvorgängen in die angegebene Nachricht verwenden können.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Me.Messages.Item.Attachments.CreateUploadSession;
using Microsoft.Graph.Models;
var requestBody = new CreateUploadSessionPostRequestBody
{
AttachmentItem = new AttachmentItem
{
AttachmentType = AttachmentType.File,
Name = "flower",
Size = 3483322L,
},
};
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Me.Messages["{message-id}"].Attachments.CreateUploadSession.PostAsync(requestBody);
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphusers "github.com/microsoftgraph/msgraph-sdk-go/users"
graphmodels "github.com/microsoftgraph/msgraph-sdk-go/models"
//other-imports
)
requestBody := graphusers.NewItemCreateUploadSessionPostRequestBody()
attachmentItem := graphmodels.NewAttachmentItem()
attachmentType := graphmodels.FILE_ATTACHMENTTYPE
attachmentItem.SetAttachmentType(&attachmentType)
name := "flower"
attachmentItem.SetName(&name)
size := int64(3483322)
attachmentItem.SetSize(&size)
requestBody.SetAttachmentItem(attachmentItem)
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
createUploadSession, err := graphClient.Me().Messages().ByMessageId("message-id").Attachments().CreateUploadSession().Post(context.Background(), requestBody, nil)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
com.microsoft.graph.users.item.messages.item.attachments.createuploadsession.CreateUploadSessionPostRequestBody createUploadSessionPostRequestBody = new com.microsoft.graph.users.item.messages.item.attachments.createuploadsession.CreateUploadSessionPostRequestBody();
AttachmentItem attachmentItem = new AttachmentItem();
attachmentItem.setAttachmentType(AttachmentType.File);
attachmentItem.setName("flower");
attachmentItem.setSize(3483322L);
createUploadSessionPostRequestBody.setAttachmentItem(attachmentItem);
var result = graphClient.me().messages().byMessageId("{message-id}").attachments().createUploadSession().post(createUploadSessionPostRequestBody);
<?php
use Microsoft\Graph\GraphServiceClient;
use Microsoft\Graph\Generated\Users\Item\Messages\Item\Attachments\CreateUploadSession\CreateUploadSessionPostRequestBody;
use Microsoft\Graph\Generated\Models\AttachmentItem;
use Microsoft\Graph\Generated\Models\AttachmentType;
$graphServiceClient = new GraphServiceClient($tokenRequestContext, $scopes);
$requestBody = new CreateUploadSessionPostRequestBody();
$attachmentItem = new AttachmentItem();
$attachmentItem->setAttachmentType(new AttachmentType('file'));
$attachmentItem->setName('flower');
$attachmentItem->setSize(3483322);
$requestBody->setAttachmentItem($attachmentItem);
$result = $graphServiceClient->me()->messages()->byMessageId('message-id')->attachments()->createUploadSession()->post($requestBody)->wait();
Import-Module Microsoft.Graph.Users.Actions
$params = @{
AttachmentItem = @{
attachmentType = "file"
name = "flower"
size = 3483322
}
}
# A UPN can also be used as -UserId.
New-MgUserMessageAttachmentUploadSession -UserId $userId -MessageId $messageId -BodyParameter $params
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.users.item.messages.item.attachments.create_upload_session.create_upload_session_post_request_body import CreateUploadSessionPostRequestBody
from msgraph.generated.models.attachment_item import AttachmentItem
from msgraph.generated.models.attachment_type import AttachmentType
# To initialize your graph_client, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
request_body = CreateUploadSessionPostRequestBody(
attachment_item = AttachmentItem(
attachment_type = AttachmentType.File,
name = "flower",
size = 3483322,
),
)
result = await graph_client.me.messages.by_message_id('message-id').attachments.create_upload_session.post(request_body)
Beispiel 2: Erstellen einer Uploadsitzung zum Hinzufügen einer großen Inlineanlage zu einem Nachrichtenentwurf
Das folgende Beispiel zeigt, wie Sie eine Uploadsitzung erstellen, die verwendet werden kann, um einem Nachrichtenentwurf eine große Inlineanlage hinzuzufügen.The following example shows how to create an upload session that can be used to add a large inline attachment to a draft message.
Legen Sie für eine Inlineanlage die isInline-Eigenschaft auf true fest, und verwenden Sie die contentId-Eigenschaft , um eine CID für die Anlage anzugeben, wie unten gezeigt. Verwenden Sie im Textkörper des Nachrichtenentwurfs denselben CID-Wert, um die Position anzugeben, an der Sie die Anlage einschließen möchten, indem Sie ein CID-HTML-Verweistag verwenden, z. B <img src="cid:my_inline_picture">. . Nach dem erfolgreichen Hochladen der Datei enthält die gerenderte Nachricht die Anlage als Teil des Nachrichtentexts am angegebenen Speicherort.
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Me.Messages.Item.Attachments.CreateUploadSession;
using Microsoft.Graph.Models;
var requestBody = new CreateUploadSessionPostRequestBody
{
AttachmentItem = new AttachmentItem
{
AttachmentType = AttachmentType.File,
Name = "scenary",
Size = 7208534L,
IsInline = true,
ContentId = "my_inline_picture",
},
};
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Me.Messages["{message-id}"].Attachments.CreateUploadSession.PostAsync(requestBody);
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphusers "github.com/microsoftgraph/msgraph-sdk-go/users"
graphmodels "github.com/microsoftgraph/msgraph-sdk-go/models"
//other-imports
)
requestBody := graphusers.NewItemCreateUploadSessionPostRequestBody()
attachmentItem := graphmodels.NewAttachmentItem()
attachmentType := graphmodels.FILE_ATTACHMENTTYPE
attachmentItem.SetAttachmentType(&attachmentType)
name := "scenary"
attachmentItem.SetName(&name)
size := int64(7208534)
attachmentItem.SetSize(&size)
isInline := true
attachmentItem.SetIsInline(&isInline)
contentId := "my_inline_picture"
attachmentItem.SetContentId(&contentId)
requestBody.SetAttachmentItem(attachmentItem)
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
createUploadSession, err := graphClient.Me().Messages().ByMessageId("message-id").Attachments().CreateUploadSession().Post(context.Background(), requestBody, nil)
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
com.microsoft.graph.users.item.messages.item.attachments.createuploadsession.CreateUploadSessionPostRequestBody createUploadSessionPostRequestBody = new com.microsoft.graph.users.item.messages.item.attachments.createuploadsession.CreateUploadSessionPostRequestBody();
AttachmentItem attachmentItem = new AttachmentItem();
attachmentItem.setAttachmentType(AttachmentType.File);
attachmentItem.setName("scenary");
attachmentItem.setSize(7208534L);
attachmentItem.setIsInline(true);
attachmentItem.setContentId("my_inline_picture");
createUploadSessionPostRequestBody.setAttachmentItem(attachmentItem);
var result = graphClient.me().messages().byMessageId("{message-id}").attachments().createUploadSession().post(createUploadSessionPostRequestBody);
<?php
use Microsoft\Graph\GraphServiceClient;
use Microsoft\Graph\Generated\Users\Item\Messages\Item\Attachments\CreateUploadSession\CreateUploadSessionPostRequestBody;
use Microsoft\Graph\Generated\Models\AttachmentItem;
use Microsoft\Graph\Generated\Models\AttachmentType;
$graphServiceClient = new GraphServiceClient($tokenRequestContext, $scopes);
$requestBody = new CreateUploadSessionPostRequestBody();
$attachmentItem = new AttachmentItem();
$attachmentItem->setAttachmentType(new AttachmentType('file'));
$attachmentItem->setName('scenary');
$attachmentItem->setSize(7208534);
$attachmentItem->setIsInline(true);
$attachmentItem->setContentId('my_inline_picture');
$requestBody->setAttachmentItem($attachmentItem);
$result = $graphServiceClient->me()->messages()->byMessageId('message-id')->attachments()->createUploadSession()->post($requestBody)->wait();
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.users.item.messages.item.attachments.create_upload_session.create_upload_session_post_request_body import CreateUploadSessionPostRequestBody
from msgraph.generated.models.attachment_item import AttachmentItem
from msgraph.generated.models.attachment_type import AttachmentType
# To initialize your graph_client, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
request_body = CreateUploadSessionPostRequestBody(
attachment_item = AttachmentItem(
attachment_type = AttachmentType.File,
name = "scenary",
size = 7208534,
is_inline = True,
content_id = "my_inline_picture",
),
)
result = await graph_client.me.messages.by_message_id('message-id').attachments.create_upload_session.post(request_body)