Итак, начинаем готовить.
1. Пишем "ядро" загрузчика. Я дописал еще один метод в класс EPDocuGet, взяв за основу один из существующих методов.
X++:
#define.BUFFER_SIZE(4096)
static void runDownloadFile(Filename fileName)
{
IISResponse response = new IISResponse();
BinData binData;
int fileOffset;
str headerFileName;
;
headerFileName = System.IO.Path::GetFileName(fileName);
headerFileName = strReplace(headerFileName, ';', '_');
headerFileName = strReplace(headerFileName, ' ', '_');
headerFileName = System.Web.HttpUtility::UrlEncode(headerFileName);
response.clear();
response.contentType('application/Octet-Stream');
response.addHeader('Content-Disposition', 'attachment;filename="' + headerFileName + '"');
binData = new BinData();
fileOffset = 0;
new FileIOPermission(fileName, 'r').assert();
while (true)
{
// BP Deviation Documented
if (!binData.loadFile(fileName, fileOffset, #BUFFER_SIZE))
{
break;
}
fileOffset += #BUFFER_SIZE;
EPDocuGet::writeToResponse(response, binData.getData());
}
}
Здесь fileName это полный путь к файлу на сервере.