2017-09-15 13 views
0

Je dois obtenir un contenu du fichier Microsoft Word (.docx) d'Amazon S3. Je suis en mesure d'obtenir l'objet, mais le résultat n'est pas exactement ce que je veux, car il ressemble à un fichier Word ouvert dans le Bloc-notes. J'ai essayé de lire le fichier .txt et cela fonctionne parfaitement. Je pense que le problème est un type de contenu.Type de fichier Word d'Amazon S3

Je voudrais poser deux questions:

  1. Est-il possible d'obtenir le contenu du document est dans le fichier @Amazon et comment modifier mon code n'achive que?
  2. Est-il possible d'obtenir le contenu avec le formatage (couleurs, texte en gras, etc.)? Si c'est le cas, je voudrais apprécier quelques indices.

Mon code:

public static string ReadObjectData(string keyName) 
{ 
    string responseBody = ""; 

    //using (IAmazonS3 client = new AmazonS3Client(RegionEndpoint.USEast1)) 
    using (IAmazonS3 client = new Amazon.S3.AmazonS3Client("key", "secretKey", Amazon.RegionEndpoint.EUCentral1)) 
    { 
     GetObjectRequest request = new GetObjectRequest 
     { 
      BucketName = "bucketName", 
      Key = keyName 
     }; 

     using (GetObjectResponse response = client.GetObject(request)) 
     using (Stream responseStream = response.ResponseStream) 
     using (StreamReader reader = new StreamReader(responseStream)) 
     { 
      responseBody = reader.ReadToEnd(); 
     } 
    } 
    return responseBody; 
} 
+0

Il n'y a pas de code dans la question qui traite de l'ouverture du document, pouvez-vous expliquer ce que vous faites qui déclenche l'ouverture du fichier dans le bloc-notes? –

Répondre

0

Je comprends votre question concernant l'obtention de l'objet avec le type de contenu. Je pense que la réponse de Michael a quelques informations pour résoudre le problème.

Je voudrais simplement ajouter quelques informations supplémentaires en stockant les objets dans le compartiment S3. Le type de contenu peut être défini dans le champ de métadonnées lorsque les objets sont ajoutés au compartiment.

Si vous stockez les objets et que vous les récupérez ultérieurement, ajoutez le type de contenu (Content-Type) dans les métadonnées. Alors que vous pouvez obtenir le type de contenu de l'objet lorsque vous le lisez.

C'est la meilleure approche si vous ajoutez et récupérez l'objet plus tard.

doc  application/msword 
docx application/vnd.openxmlformats-officedocument.wordprocessingml.document 

Si vous lisez l'objet ajouté par quelqu'un d'autre, vous pouvez demander ensuite d'ajouter les informations de type de contenu (ou), vous devez déduire comme mentionné dans la réponse de Michael.

1

Le Content-Type correct pour un fichier .docx est application/vnd.openxmlformats-officedocument.wordprocessingml.document.

Le type de contenu défini incorrectement peut entraîner un rendu incorrect du document par le navigateur Web, mais le problème n'est probablement pas le cas ici. Le définir correctement n'aura aucun impact sur les octets qui sont réellement contenus dans responseBody si vous essayez de le lire à partir du code.

Vous avez besoin d'une bibliothèque qui comprend les composants internes des fichiers au format .docx.