2010-08-13 27 views
0

J'ai un fichier MHTML qui a des images incorporées. Le MHTML est généré sur le serveur et ensuite je vais généralement livrer le fichier en utilisant un BinaryWrite. J'ai également essayé Server.Transfer, Response.Write après la conversion en ASCII et en écrivant le fichier sur le disque et en utilisant un Response.WriteFile. Dans tous ces cas, le fichier résultant n'est pas (semble-t-il) traité comme un fichier mht. Pour définir l'image, j'ai essayé Content-ID et Content-Location. L'URL de l'image s'affiche sous la forme cid:example1 lorsqu'elle est affichée dans IE8. Lors de l'ouverture du fichier après l'enregistrement sur le disque, il apparaît comme mhtml:file://C:\Documents et Settings\benjynito\Desktop\output634172401776447258.mht!cid:example1. Ou tout en naviguant avec l'une des méthodes qui fonctionnent, vous obtenez mhttp://...output123.mht!cid:example1.BinaryWrite du fichier MHT n'est pas traité comme MHT par IE

Le type Output.MimeType est le message/rfc822. J'ai également essayé application/octet-stream et multipart/related. L'écriture du fichier sur le disque et l'utilisation d'un Response.Redirect fonctionne.

Accéder au fichier avec une URL directe fonctionne. L'enregistrement du fichier sur le disque puis l'ouverture du fichier fonctionne.

Il semble que IE suppose un résultat HTML à la demande et ne déchiffre pas le nouveau type de contenu. Mais vous pouvez faire des choses comme ça pour les feuilles de style dynamiques, les scripts, etc ... donc je ne le crois pas vraiment. Je ne pouvais pas voir de différences flagrantes. J'ai juste essayé et le BinaryWrite fonctionne bien dans Opera.

Si je dois absolument m'inquiéter de l'écriture dans un répertoire temporaire, puis rediriger vers le fichier que je vais. J'espérais juste éviter d'avoir à nettoyer les fichiers temporaires. Est-ce que ce que je veux faire n'est pas possible? Un exemple d'écriture du fichier est ci-dessous.

Merci d'avance!

if (response != null && response.Output != null) 
{ 
    Response.Clear(); 
    Response.AddHeader("Content-Type", response.Output.MimeType); 
    Response.AddHeader("Content-Disposition", "attachment;filename=output" + DateTime.UtcNow.Ticks.ToString(CultureInfo.InvariantCulture) + "." + response.Output.Extension); 

    // Response.Write(System.Text.Encoding.ASCII.GetString(response.Output.Bytes)); 
    Response.BinaryWrite(response.Output.Bytes); 

    //Response.Clear(); 
    //Server.Transfer("/ISV/Forms/Test/output634172397522707394.mht"); 

    //Response.Clear(); 
    //Response.WriteFile(Server.MapPath("/ISV/Forms/Test/output634172397522707394.mht")); 

    Response.Flush(); 
    Response.End(); 
} 

Répondre

1

Je ne pense pas que vos en-têtes Content-Type et Content-Disposition soient corrects. Utilisez Fiddler pour voir à quoi ils correspondent lorsque vous téléchargez MHTML en tant que fichier statique. Essayez un type de multipart/liés et une disposition de inline. Il y a some evidence que cette combinaison fonctionne.

+0

Je vais essayer. J'ai remarqué que la longueur du contenu n'apparaît pas sous les en-têtes mais est plutôt encodée en g-zip pour mon fichier écrit en binaire, donc je vais essayer de définir manuellement cet en-tête. Sinon, les en-têtes s'alignent plutôt bien et j'ai déjà essayé de faire correspondre les en-têtes. Merci pour la réponse. –

+0

Eh bien, je n'ai pas encore tout compris, mais je suppose que c'est quelque chose avec le format de mon fichier mht. J'ai été capable de prendre un fichier MHT généré par IE et de faire un BinaryWrite dessus et cela fonctionne. –

+0

Ok, ça l'expliquerait. –