Я унаследовал этот сайт и имел проблемы с загрузкой файлов. Файлы, такие как .pdf, .doxs, .txt, сохраняются в Sql как изображение. Элементы управления datalist используются с элементами управления a href
, чтобы просмотреть его/загрузить, но он не работает. И я понимаю, что управление a href
не является надлежащим контролем, но не уверен, какой контроль использовать.Загрузка файла из базы данных не работает
Вот ASPX разметка:
<asp:DataList ID="DataList2" runat="server" DataSourceID="SqlDataSource2" DataKeyField="fileId">
<ItemTemplate>
<a href='<%# "~/UserControls/FileFetch.ashx?fileId=" + Convert.ToString(Eval("fileId")) %>' target="_blank">
<%# Convert.ToString(Eval("fileName"))%></a>
</ItemTemplate>
</asp:DataList>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:ClubSiteDB %>"
SelectCommand="SELECT [fileId], [fileName], [postedBy] FROM [FilesLibrary]">
</asp:SqlDataSource>
Вспомогательный файл с именем FileFetch.ashx используется для получения файла:
<%@ WebHandler Language="C#" Class="FileFetch" %>
using System;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.IO;
public class FileFetch : IHttpHandler
{
const int BUFFERSIZE = 1024;
public bool IsReusable
{
get
{
return true;
}
}
public void ProcessRequest(HttpContext context)
{
HttpResponse response = context.Response;
HttpRequest request = context.Request;
response.ContentType = "response.ContentType";
response.Cache.SetCacheability(HttpCacheability.Public);
response.BufferOutput = false;
writeSingleImage(Convert.ToInt32(request.QueryString["fileId"]), response.OutputStream);
response.End();
}
public void writeSingleImage(int fileId, Stream output)
{
string cxnstr = System.Configuration.ConfigurationManager.ConnectionStrings["ClubSiteDB"].ConnectionString;
SqlConnection connection = new SqlConnection(cxnstr);
string query;
query = "SELECT fileData FROM dbo.FilesLibrary where [email protected]";
SqlCommand command = new SqlCommand(query, connection);
SqlParameter param0 = new SqlParameter("@fileId", SqlDbType.Int);
param0.Value = fileId;
command.Parameters.Add(param0);
connection.Open();
byte[] d = ((byte[])(command.ExecuteScalar()));
output.Write(d, 0, d.Length);
connection.Close();
}
}
Что такое downvote? – Risho
Какая ошибка? Вы проследили, в какой строке это происходит? – Damon
Я получаю: ' Ресурс не найден. Описание: HTTP 404. Ресурс, который вы ищете (или его зависимости), мог быть удален, изменилось его имя или временно недоступно. Просмотрите следующий URL-адрес и убедитесь, что оно написано правильно. Запрошенный URL:/Test/~/UserControls/FileFetch.ashx'. Но в базе данных есть запись с конкретным идентификатором. Также отладчик никогда не входит в файл FileFetch.ashx. – Risho