none
При скачивании файла из библиотеки SharePoint 2013 русские имена файлов обрезаются. Как исправить? RRS feed

  • Вопрос

  • Удается загрузить в SP файлы с длинными именами по-русски и нормально работать с ними, но вот скачать их нормально не выходит. Во всех браузерах при скачивании (меню Загрузить копию) длинное русское имя файла обрезается.

    Например, было название файла: 
    Длинное_очень_длинное_имя_файла_по-русски.doc
    Стало: 
    Длинное_очень_длинное_имя_фай.doc

    Как сделать, чтобы не обрезалось?

    Кстати, в Firefox имена файлов вовсе скачиваются URL Encoded.


    29 апреля 2015 г. 8:13

Ответы

  • При скачивании копии документа, вызывается страница download.aspx.
    А в ней уже происходит обработка запроса, и в частности, вызывается метод, который урезает имя:

    // Microsoft.SharePoint.Utilities.SPHttpUtility
    public static string UrlEncodeFilenameForHttpHeader(string fileName)
    {
    	string text = SPHttpUtility.UrlEncodeForFilename(System.IO.Path.GetExtension(fileName), 128, true);
    	string str = string.Empty;
    	if (text.Length < 128)
    	{
    		str = SPHttpUtility.UrlEncodeForFilename(System.IO.Path.GetFileNameWithoutExtension(fileName), 128 - text.Length, true);
    	}
    	return str + text;
    }
    Т.к. закодированное имя длинного русского файла превышает 128 символов, то оно обрезается.


    [custom.development]

    30 апреля 2015 г. 10:01
  • Как сделать, чтобы не обрезалось?

    Если хочется через кнопку на ribbon, то можно стандартную скрыть, добавить свою.
    При нажатии на которую, произойдёт переадресация на url выбранного файла. Браузер предложит сохранить файл с "нормальным" именем.


    [custom.development]



    30 апреля 2015 г. 10:07

Все ответы

  • При скачивании копии документа, вызывается страница download.aspx.
    А в ней уже происходит обработка запроса, и в частности, вызывается метод, который урезает имя:

    // Microsoft.SharePoint.Utilities.SPHttpUtility
    public static string UrlEncodeFilenameForHttpHeader(string fileName)
    {
    	string text = SPHttpUtility.UrlEncodeForFilename(System.IO.Path.GetExtension(fileName), 128, true);
    	string str = string.Empty;
    	if (text.Length < 128)
    	{
    		str = SPHttpUtility.UrlEncodeForFilename(System.IO.Path.GetFileNameWithoutExtension(fileName), 128 - text.Length, true);
    	}
    	return str + text;
    }
    Т.к. закодированное имя длинного русского файла превышает 128 символов, то оно обрезается.


    [custom.development]

    30 апреля 2015 г. 10:01
  • Как сделать, чтобы не обрезалось?

    Если хочется через кнопку на ribbon, то можно стандартную скрыть, добавить свою.
    При нажатии на которую, произойдёт переадресация на url выбранного файла. Браузер предложит сохранить файл с "нормальным" именем.


    [custom.development]



    30 апреля 2015 г. 10:07
  • Приветствую!  Существует аналогичная проблема: при сохранении украинско/русско язычного файла обрезается длинное его наименование.  Есть ли решение проблемы? Если есть возможность, опишите подробней решение проблемы? Спасибо. 
    19 июля 2016 г. 6:06
  • А более подробнее:  - где находится файл download.aspx ?  - на какое значение рекомендуется изменить 128 ?   - если можно, более подробней опишите решение? Спасибо.
    • Изменено Dorosh 19 июля 2016 г. 7:06
    19 июля 2016 г. 6:08
  • Если можно, более подробней опишите решение с заменой кнопки? Спасибо.
    • Изменено Dorosh 19 июля 2016 г. 7:06
    19 июля 2016 г. 6:09