#c# #asp.net #linq #binaryfiles
#c# #asp.net #linq #двоичные файлы
Вопрос:
Я сохраняю свои файлы word / excel / pdf / Img в SQL с использованием двоичных файлов, и я могу успешно сохранить файлы как двоичные.
var fileSize = FileUpload1.PostedFile.ContentLength;
var documentBinary = new byte[fileSize];
var u = new UDocument
{
DocName = fileName.ToString(CultureInfo.InvariantCulture),
Type = documentType.ToString(CultureInfo.InvariantCulture),
DocData = documentBinary
};
u.DocID = count;
sd.UDocuments.InsertOnSubmit(u);
sd.SubmitChanges();
Теперь я пытаюсь открыть двоичный файл как их тип документа, и я открываю его из gridview, где я отображаю все сохраненные файлы.
Теперь, в событии Gridview SelectedIndexChange, я могу получить идентификатор документа, имя документа, чтобы открыть файл, но мне неясно, как получить двоичные данные из documentId, который является PK, и как записать файл. Вот метод, который я пытаюсь заставить его работать:
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
int docid = Convert.ToInt16(GridView1.SelectedRow.Cells[1].Text);
string name = GridView1.SelectedRow.Cells[2].Text;
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" name);
Response.BinaryWrite(GetData(docid)); // I am unclear on how to use this method, with the
Response.Flush();
}
где в моем методе getData (int id) я пытаюсь использовать LINQ для получения правильных двоичных данных с помощью уникального идентификатора docID следующим образом:
var data = from a in sd.UDocuments
where a.DocID == id
select a.DocData
но я не уверен, какой возвращаемый тип использовать в этом методе.
Любая помощь или указания будут полезны.
Ответ №1:
Возвращаемый тип GetData
должен совпадать с типом вашего DocData
свойства, т. е. byte[]
.
Комментарии:
1. я говорил слишком рано, но 1, поскольку вы заставили меня пересмотреть метод, который у меня был раньше ..private byte[] getData(int id) { byte[] data = (из a в sd. UDocuments, где.DocID == id выберите.DocData). Сначала(). toArray(); возвращает данные; }
Ответ №2:
private byte[] GetData(int id)
{
byte[] data = (from a in sd.UDocuments
where a.DocID == id
select a.DocData).First().ToArray();
return data;
}
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
int docid = Convert.ToInt16(GridView1.SelectedRow.Cells[1].Text);
string name = GridView1.SelectedRow.Cells[2].Text;
string contentType = GridView1.SelectedRow.Cells[3].Text;
Response.Clear();
Response.ContentType = contentType; //"application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" name);
Response.BinaryWrite(GetData(docid));
Response.End();
}