J'utilise un webgrid et j'ai mis un bouton de téléchargement à l'intérieur pour télécharger un fichier depuis la grille.Pourquoi le téléchargement d'un fichier génère une erreur de disposition multiple?
Mais il génère une erreur: localhost a envoyé une réponse non valide. ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION
[HttpGet]
public ActionResult DownloadStories()
{
string filename = "saddam.png";
string filepath = Server.MapPath("~/UploadedFiles/") + filename; //AppDomain.CurrentDomain.BaseDirectory + "/UploadedFiles/" + filename;
byte[] filedata = System.IO.File.ReadAllBytes(filepath);
string contentType = MimeMapping.GetMimeMapping(filepath);
var cd = new System.Net.Mime.ContentDisposition
{
FileName = filename,
Inline = true,
};
// Response.AppendHeader("Content-Disposition", cd.ToString());
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
return File(filedata, contentType, cd.FileName);
}
Vue:
WebGrid wgImages = new WebGrid(listData, rowsPerPage: 20);
@wgImages.GetHtml(tableStyle: "table table-condensed table-bordered table-striped table-responsive",
columns: wgImages.Columns(
wgImages.Column
(columnName: "Image", header:"Image"),
wgImages.Column
(columnName:"Story", header: "Story"),
wgImages.Column
(columnName:"Image", header:"Download", format: (testItem)=> Html.ActionLink("Download", "DownloadStories", "Stories")
))
);
}
J'ai essayé le code que j'ai commenté maintenant et cela ne fonctionne pas trop.
Vérifiez la [documentation] (https://msdn.microsoft.com/en-us/library/system.web.mvc.controller.file (v = vs. 118) .aspx # M: System.Web.Mvc.Controller.File% 28System.Byte [], System.String, System.String% 29): "Le paramètre * fileDownloadName * est utilisé pour générer l'en-tête content-disposition. " - donc * vous n'avez pas à * le faire vous-même. –
Essayez de supprimer 'Response.AddHeader (" Content-Disposition "," pièce jointe; nom_fichier = \ "" + nom_fichier + "\" ");' car cela risque de provoquer des en-têtes dupliqués. 'cd.FileName' lui-même déclare déjà' System.Net.Mime.ContentDisposition' qui doit envoyer le fichier dans le navigateur du client. –
@TetsuyaYamamoto ok mais maintenant il ouvre seulement le fichier dans le spectateur ne pas télécharger –