Как скачать файл, зная его id

Использую вот такой вот скрипт, где FileID - id нашего файла

EntitySchemaManager esqManager = UserConnection.EntitySchemaManager;
var esqResult = new EntitySchemaQuery(esqManager, "File");
esqResult.AddAllSchemaColumns();
esqResult.AddColumn("Data");
Entity currentFile = esqResult.GetEntity(UserConnection, FileID);
       
//файл должен появиться
while (currentFile == null) {
        currentFile = esqResult.GetEntity(UserConnection, FileID);     
}
var currentFileName = currentFile.GetTypedColumnValuestring>("Name");
var currentFileData = currentFile.GetBytesValue("Data");

var Response = Page.Response;

Response.AddHeader("Content-Disposition", "attachment; filename=\""" + System.Web.HttpUtility.UrlPathEncode(currentFileName) + ""\"""");

Нравится

3 комментария

Здравствуйте, Александр!
Думаю, стоит воспользоваться готовым решением из процесса "Скачать шаблон для импорта контрагентов", например:

public virtual bool DownloadTemplateScriptExecute(ProcessExecutingContext context) {
			var entitySchemaManager = UserConnection.EntitySchemaManager;
var entitySchema = entitySchemaManager.GetInstanceByName("File"); 
var entitySchemaQuery = new EntitySchemaQuery(entitySchemaManager, entitySchema.Name);
 
var dataColumn = entitySchemaQuery.AddColumn("Data");
entitySchemaQuery.Filters.Add(
	entitySchemaQuery.CreateFilterWithParameters(
		FilterComparisonType.Equal, "[KnowledgeBaseFile:FileId].KnowledgeBase", new object[] {new Guid("edb71f06-f46b-1410-e980-20cf30b39373")}));
entitySchemaQuery.Filters.Add(
	entitySchemaQuery.CreateFilterWithParameters(
		FilterComparisonType.Equal, "Name", new object[] {FileName.ToString()}));
 
var entityCollection = entitySchemaQuery.GetEntityCollection(UserConnection);
if (entityCollection.Count > 0) {
	var data = entityCollection[0].GetBytesValue(dataColumn.Name)  as byte[];    
	var response = HttpContext.Current.Response; 
	TSConfiguration.PageResponse.Write(response, data, FileName, TSConfiguration.ContentType.XmlType);
}
 
return true;
		}

К сожалению у меня TSConfiguration не знает методов PageResponse и ContentType, и в процессе "Скачать шаблон ..." вместо TSConfiguration стоит скрипт

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + System.Web.HttpUtility.UrlPathEncode(FileName) + ""\"""");

Александр, какая у Вас версия ядра?
Попробую воспроизвести.
По поводу загрузки данных попробуйте перед вызовом LoadRows() установить

Page.DataSource.PageRowsCount = -1; //или заведомо вольшое числ
Показать все комментарии