SaraMs Ответов: 2

Как загрузить двоичный файл из базы данных на языке Си#


Я пытаюсь загрузить вложение, рабочий процесс кода работает хорошо, но вложение не загружается и никаких ошибок не показывает :/ < / 3

Я отлаживаю код строка за строкой и правильные данные передаются через код но никаких файлов не загружается ;/

Я не мог понять, в чем проблема, пожалуйста, мне срочно нужна помощь T_T

весь код метода загрузки показан ниже V

Что я уже пробовал:

1. Default. aspx
<asp:TemplateField HeaderText="Attachments">
<ItemTemplate>
<a id='<%# Eval("ID")%>-attachment'  onclick="DownloadStaffAttachment" href="javascript: ShowAttachment( '<%# Eval("ID")%>', '<%# Eval("HasAttachment")%>' )" >Attachment</a>
</ItemTemplate>

function ShowAttachment(taskID, HasAttachment) {
           
            if (HasAttachment == 'False')
            {
                alert('No Attachment found for this Task');
            } else {
                DownloadAttach(taskID);
            }
        }


        function DownloadAttach(ID) {
            var parameter = '{"ID" : "' + ID + '"}';
            var url = window.location.protocol + '//' + window.location.host + '//' + 'staff/dashboard.aspx/DownloadStaffAttachment';
            $.ajax({
                url: url,
                data: parameter,
                dataType: "json",
                contentType:"application/json",  
                cache: false,
                context: document.body,
                type: 'post',
                success: function (Response)
                {
                    alert(Response);
                }
            });
        }


2. Defaultaspx. cs

  public static void DownloadStaffAttachment(int ID)
        {
           
            DownloadFile File = new DownloadFile();
            WorkerManagement management = new WorkerManagement();
            System.Web.HttpResponse Response = System.Web.HttpContext.Current.Response;
File = management.DownloadStaffAttachment(ID);
Response.Clear();
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = File.ContentType;
Response.AppendHeader("Content-Disposition", "attachment; filename=" + File.FileName);
Response.BinaryWrite(File.FileData);
Response.Flush();
Response.End();

        }


3.WorkMangement.в CS

public DownloadFile DownloadStaffAttachment(int ID)
        {
            try
            {
                return _workerDao.DownloadStaffAttachment(ID);

            }
            catch (Exception ex)
            {
                return null;
            }

        }


4. WorkerDoa

public DownloadFile DownloadStaffAttachment(int ID)
        {
            DownloadFile file = new DownloadFile();
            _dbUtil = new DatabaseUtil();
            _dbParameters = new DbParameter[1];
            
            try
            {
                DatabaseUtil.SetParameter(_dbUtil, _dbParameters,0, "UserID", ID);
                DbDataReader drUserDetails = _dbUtil.ExecuteDataReader(SpConstant.SP_GET_FILE_BY_STAFF, CommandType.StoredProcedure, _dbParameters);

                if (drUserDetails.Read())
                {
                    file.FileName = Convert.ToString(drUserDetails["FileName"]);
                    file.ContentType = Convert.ToString(drUserDetails["ContentType"]);
                    file.FileData = (byte[])(drUserDetails["FileData"]);
                    file.FileSize = Convert.ToString(drUserDetails["FileSize"]);
                } else 
       
                drUserDetails.Close();
                return file;
            }
            finally
            {
                _dbUtil.closeConnection();
            }
            
        }

2 Ответов

Рейтинг:
12

P_Z

Привет, из кода кажется, что вы хотите скачать файлы с помощью Ajax...as есть:

success: function (Response)
               {
                   alert(Response);
               }

скорее всего, он вернет содержимое файла в виде текста...также проверьте это
public DownloadFile DownloadStaffAttachment(int ID)
не возвращает null.

Если ваши требования, чтобы скачать файл с помощью AJAX, есть библиотека на JS файл jQuery плагин Скачать для AJAX, как, многофункциональный файл загружает | johnculviner.com[^] который может достичь этого. Конечно, я не разрабатывал эту библиотеку, но использовал ее в проектах.


Или другой способ-скачать без Ajax ex: c# - ASP.NET загрузка файла с сервера-переполнение стека[^] аналогичный код для:
    protected void Button1_Click(object sender, EventArgs e)
{ 
byte[] Content= File.ReadAllBytes(FilePath); //Note you already have the byte array at: "file.FileData"
Response.ContentType = "application/octet-stream"; //set the mime type
Response.AddHeader("content-disposition", "attachment; filename=" + fileName);
Response.BufferOutput = true;;
Response.OutputStream.Write(Content, 0, Content.Length);
Response.End(); 
}


Рейтинг:
0

Wendelius

Если вы не получаете ошибку, наиболее вероятными причинами являются
- код для извлечения данных не выполняется
- выполнение идет нормально, но данные не возвращаются

Попробуйте поставить точку останова на линию

_dbUtil.ExecuteDataReader(SpConstant.SP_GET_FILE_BY_STAFF, CommandType.StoredProcedure, _dbParameters);

и с помощью отладчика проходите код построчно. Выполняется ли запрос и действительно ли он возвращает правильные данные.


SaraMs

я отлаживаю код строка за строкой и правильные данные передаются через код но никаких файлов не загружается ;/

Wendelius

Когда вы посмотрите на линию

файл.FileData = (byte []) (drUserDetails ["FileData"]);

Назначает ли он правильные данные?

SaraMs

да он получает правильные данные ;/