2016-09-19 2 views
0

У меня есть несколько элементов управления загрузкой файлов в моей форме. Я пытаюсь загрузить столько, сколько файлов, которые пользователи хотят получить в базе данных с выпадающим списком, чтобы выбрать тип вложения. Я могу сохранить файл в базе данных, но я получаю все 0 для своих данных (0x00000000000000000000000000000000000000000000 ... 00). И когда я пытаюсь получить файл, когда пользователь нажимает на ссылку на файл, я получаю сообщение об ошибке syas «Не удалось загрузить документ pdf».Сохранение данных в базу данных с помощью fileuploadControl в C#

Вот мой код для сохранения в базе данных:

public void getDynamicFilesFromUploadedFileList(int wWireTransferID, int wUserID) 
    { 
     if (GridView1.Rows.Count > 0) 
     { 
      foreach (GridViewRow grow in GridView1.Rows) 
      { 
       try 
       { 
        FileUpload fileuploadControl = new FileUpload(); 
        fileuploadControl = (FileUpload)grow.FindControl("fUpControl"); 

        DropDownList drpFileType = new DropDownList(); 
        drpFileType = (DropDownList)grow.FindControl("ddlFileType"); 
        Guid newID = Guid.NewGuid(); 

        if (fileuploadControl.HasFile) 
        { 
         //I believe here is my mistake 
         Byte[] fileData = new Byte[fileuploadControl.PostedFile.ContentLength]; 

         new MRSManager().InsertWTDocument(wWireTransferID, 
          fileuploadControl.FileName, 
          drpFileType.SelectedValue.Trim(), 
          fileuploadControl.PostedFile.ContentType, 
          System.IO.Path.GetExtension(fileuploadControl.FileName), 
          fileuploadControl.PostedFile.ContentLength.ToString(), 
          fileData, 
          wUserID, 
          newID); 
        } 
        else 
        { 
         string m = "No File! "; 
        } 
       } 
       catch (Exception Exp) 
       { 
        string msg = Exp.Message.ToString(); 
       } 
      } 
     } 
    } 

enter image description here

И это код на Как я пытаюсь получить файл.

protected void Page_Load(object sender, EventArgs e) 
    { 
     // Get the file id from the query string 
     string id = Request.QueryString["ID"]; 

     // Get the file from the database 
     DataTable file = GetAFile(id); 
     DataRow row = file.Rows[0]; 

     string name = (string)row["FileName"]; 
     string contentType = (string)row["ContentType"]; 
     Byte[] data = (Byte[])row["Data"]; 

     Response.Clear(); 
     Response.ClearContent(); 
     Response.ClearHeaders(); 
     // Send the file to the browser 
     Response.AddHeader("Content-type", contentType); 
     Response.AddHeader("Content-Disposition", "inline; filename=" + name); 
     Response.Buffer = true; 
     Response.BinaryWrite(data); 
     Response.Flush(); 
     Response.Close(); 
     Response.End(); 
    } 

    // Get a file from the database by ID 
    public static DataTable GetAFile(string id) 
    { 
     DataTable file = new DataTable(); 
     string sSQL = string.Format("SELECT * FROM tblWireTransferDocuments WHERE FileID = '{0}'", id); 
     file = SqlHelper.ExecuteDataset(DBConnection.GetConnectionString(), CommandType.Text, sSQL, null).Tables[0]; 
     return file; 
    } 
} 

}

+0

проверить это http://stackoverflow.com/questions/2579373/saving-any-file-to-in-the-database-just-convert-it-to-a-byte-array – DanielVorph

ответ

2

Вы правы

//I believe here is my mistake 
Byte[] fileData = new Byte[fileuploadControl.PostedFile.ContentLength]; 

Вы только создали FILEDATA, но не заполнили его. Для заполнения fileData вы должны использовать fileuploadControl.FileContent.

+0

Вы можете создать поток и прочитайте его. using (System.IO.Stream myStream = fileuploadControl.FileContent) { myStream.Read (fileData, 0, fileuploadControl.PostedFile.ContentLength); } – steryd

+0

Спасибо, что сработало – S5498658

Смежные вопросы