Pergunta

Estou usando o objeto HttpContext implementado no filho HttpHandler para baixar um arquivo. Quando tenho caracteres não ASCII no nome do arquivo, parece estranho no IE, mas parece bom no Firefox.

abaixo está o código: -

       context.Response.ContentType = ".cs";
context.Response.AppendHeader("Content-Length", data.Length.ToString());
context.Response.AppendHeader("Content-Disposition", String.Format("attachment; filename={0}",filename));
        context.Response.OutputStream.Write(data, 0, data.Length);

context.Response.Flush();

quando eu forneço 'ß' 'ä' 'ö' 'ü' 'ó' 'ß' 'ä' 'ö' 'ü' 'ó' no campo de nome do arquivo, parece diferente do que tenho no arquivo nome, parece bom no Firefox.adicionar EncodingType e charset não adiantou.

Ou seja, é 'ß''ä''ö''ü''ó''ß''ä''ö''ü'_'ó' e no Firefox é 'ß' 'ä' 'ö' 'ü' 'ó' 'ß' 'ä' 'ö' 'ü' 'ó'.

Alguma idéia de como isso pode ser corrigido?

Foi útil?

Solução

Este é o comportamento padrão, você precisará mapear campos de anúncios para propriedades de perfil do usuário manualmente no no-break para recuperar outros valores.

Outras dicas

Httputilidade.urlpathEncode pode ser uma opção melhor. Como o Urlencode substituirá os espaços pelos sinais '+'.

Para mim, esta solução está trabalhando em todos os principais navegadores:

Response.AppendHeader("Content-Disposition", string.Format("attachment; filename*=UTF-8''{0}", HttpUtility.UrlPathEncode(fileName).Replace(",", "%2C"));
var mime = MimeMapping.GetMimeMapping(fileName);
return File(fileName, mime);

Usando asp.net MVC 3.

A substituição é necessária, porque o Chrome não gosta de vírgula (,) nos valores dos parâmetros: http://www.Gangarasa.com/lets-go-goodcode/tag/err_response_headers_multiple_content_disposition/

Você pode querer ler RFC 6266 e veja os testes em http://greenbytes.de/tech/tc2231/.

Para mim, isso resolveu o problema:

var result = new HttpResponseMessage(HttpStatusCode.OK)
{
   Content = new ByteArrayContent(data)
};

result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
    FileNameStar = "foo-ä-€.html"
};

Quando olho para ad o repsonse em violinista, posso ver que o nome do arquivo foi codificado automático usando o UTF-8:

Exemplo de resposta do violinista com o nome do arquivo de disposição de conteúdo codificado usando o UTF-8

Se olharmos para o valor do cabeçalho da disposição de conteúdo, podemos ver que será o mesmo que @Johannes Geyer sua resposta. A única diferença é que não precisamos fazer a codificação de nós mesmos, a classe ContentDispositionHeaderValue cuida disso.

Eu usei o testcases para o cabeçalho da disposição de conteúdo em: http://greenbytes.de/tech/tc2231/ Como mencionado por Julian Reschke. Informações sobre a classe ContentDispositionHeaderValue podem ser encontradas no MSDN.

Para asp.net Core (versão 2, a partir deste post), o urlpathEncode está depreciado, veja como alcançar o resultado desejado:

System.Net.Mime.ContentDisposition cd = new System.Net.Mime.ContentDisposition
{
   FileName = Uri.EscapeUriString(fileName),
   Inline = true  // false = prompt the user for downloading;  true = browser to try to show the file inline
};

Response.Headers.Add("Content-Disposition", cd.ToString());

Os anexos estão tecnicamente disponíveis em qualquer lista do SharePoint.Dependendo da definição da lista, às vezes eles podem ser obscurecidas.

Com a lista de postagens do blog, eles estão ativados (apenas não visíveis a partir das configurações).Se você navegar até a lista de itens de lista da lista de postagens e selecione a marca de seleção para uma postagem, a opção Anexar arquivo está disponível na faixa de opções em itens.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top