Как показать сохраненный pty btye массив в SQL Server для asp.net WebForm в окне изображения? - PullRequest
5 голосов
/ 05 марта 2012

Я занимаюсь разработкой веб-приложения, в котором мне нужно хранить файлы изображений и некоторые другие документы в базе данных, а затем я должен показать их на веб-странице в графическом окне. я сохранил изображения в базе данных, а также файлы PDF в виде массива байтов, и я использовал универсальный обработчик, чтобы получить массив байтов из базы данных, а затем показать их в окне изображения, он отлично работает для изображений, но он не работает с файлами PDF .

public class ShowImage : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    { 
        Int32 imgID;
        if (context.Request.QueryString["id"] != null)
            imgID = Convert.ToInt32(context.Request.QueryString["id"]);
        else
            throw new ArgumentException("No parameter specified");

        context.Response.ContentType = "image/jpeg";
        byte[] buffer = ShowEmpImage(imgID);
        context.Response.BinaryWrite(buffer);
    }

    public Stream ShowEmpImage(int empno)
    {
        dbClass db = new dbClass();
        string sql = "SELECT imgfile FROM myFiles WHERE id = @ID";
        SqlCommand cmd = new SqlCommand(sql, db.con);
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@ID", empno);
        object img = null;
        try
        {
            db.Connect();
            img = cmd.ExecuteScalar();
        }
        catch
        {
            return null;
        }
        finally
        {
            db.Disconnect();
        }
        return new MemoryStream((byte[])img);
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

, пожалуйста, сообщите мне, как я могу показать файлы PDF и некоторые другие файлы в окне изображения? на самом деле проблема в том, что мое приложение работает с существующим приложением, и у него нет возможности хранить расширения файлов, поэтому единственный способ показать файлы - это «показать их в виде изображения», но если они лучше, помогите мне, друзья .

Ответы [ 2 ]

3 голосов
/ 10 апреля 2012

спасибо @Marc Gravell Когда я выбираю файл и нажимаю на кнопку для загрузки, я перехожу на страницу, как Visual Studio закрыта, и я хочу запустить свой проект. что-то вроде того. Вот мой код, который я использую для сохранения файлов PDF и изображений.

string sql = "INSERT INTO uploadedfiles(name, srID, policy, date, LOGpdf, fileExtension) VALUES(@p, @d, @pol, @dt, @img, @extension) SELECT @@IDENTITY";

                db.Connect();
                SqlCommand cmd = new SqlCommand(sql, db.con);
                cmd.Parameters.AddWithValue("@p", txtName.Text);
                cmd.Parameters.AddWithValue("@d", txtSrID);
                cmd.Parameters.AddWithValue("@pol", lblPolicyID.Text);
                cmd.Parameters.AddWithValue("@dt", txtDate.Text);
                if (FileUpload1.HasFile)
                {
                    cmd.Parameters.AddWithValue("@img", imgByte);
                    cmd.Parameters.AddWithValue("@extension", extension);
                }
                int id = Convert.ToInt32(cmd.ExecuteScalar());

Я искал и обсуждал с моим другом, и мы придумали этот код, и это помогло мне, но мой друг сказал, что он будет загружать файлы только до 100 МБ.

<location path="UploadFiles.aspx">
    <system.web>
        <httpRuntime executionTimeout="2040" maxRequestLength="104857600"/>
    </system.web>
</location>

И в моем приложении пользователь может загружать файлы размером более 100 МБ, в этом случае это также приведет к сбою.

1 голос
/ 05 марта 2012

Есть причина, по которой PDF не работает при представлении его как изображения ... это не изображение . Кроме того, утверждение о том, что это "image/jpeg", сделает его довольно испорченным, если браузер не выполнит явную проверку заголовка файла и не потребует исправления IMO. Если вы в настоящее время не сохраняете имя файла / расширение / MIME / что-то, то, честно говоря: это проблема, которую вам нужно исправить.

Для отображения PDF, я подозреваю, вам нужно будет использовать <iframe> вместо <img>, который a: может работать не во всех браузерах, а b: может быть не очень удобен для вызывающей стороны. Лично я бы просто предложил ссылку на скачивание (а в обработчике используйте content-disposition, чтобы браузер воспринимал ее как загрузку).

...