Как я могу загрузить файл с помощью AsyncFileUpload и сохранить байты в базе данных? - PullRequest
2 голосов
/ 25 августа 2011

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

protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e)
{
    if (DetailsView1.CurrentMode == DetailsViewMode.Insert)
    {
        if (Session["ProjectId"] != null)
        {
            int Projectid = Convert.ToInt32(Session["ProjectId"]);
            string Description = (DetailsView1.FindControl("RadEditor1") as RadEditor).Content;
            RadAsyncUpload radAsyncUpload = DetailsView1.FindControl("RadAsyncUpload1") as RadAsyncUpload;

            UploadedFile file = radAsyncUpload.UploadedFiles[0];
            string s = file.FileName;
            string path = System.IO.Path.GetFileName(s);

            radAsyncUpload.UploadedFiles[0].SaveAs(Server.MapPath("Uploads/") + path);
            string Contenttype = radAsyncUpload.UploadedFiles[0].ContentType;
            int fileSize = radAsyncUpload.UploadedFiles[0].ContentLength;
            float length = float.Parse(fileSize.ToString());
            byte[] fileData = new byte[file.InputStream.Length];
            file.InputStream.Read(fileData, 0, (int)file.InputStream.Length);


                    ProTrakEntities objEntity = new ProTrakEntities();
                    ProjectFile objFile = new ProjectFile();
                    objFile.ProjectId = Projectid;
                    objFile.FileName = s;
                    objFile.FileType = Contenttype;
                    objFile.FileSize = length;
                    objFile.CreatedBy = "admin";
                    objFile.CreatedDate = DateTime.Now;
                    objFile.Description = Description;
                    objFile.FileData = fileData;
                    objEntity.AddToProjectFiles(objFile);
                    objEntity.SaveChanges();

        }
        DetailsView1.ChangeMode(DetailsViewMode.ReadOnly);
        ClientScript.RegisterStartupScript(Page.GetType(), "mykey", "CloseAndRebind('navigateToInserted');", true);



    }
}

Я получаю сообщение об ошибке при загрузке в строку file.InputStream.Read(fileData, 0, (int)file.InputStream.Length);:

Could not find file 'D:\Tiru\Projects\ProTrak\App_Data\RadUploadTemp\0ngsv0wx.fxs'.

Что означает эта ошибка, и как я могу от нее избавиться?

Ответы [ 2 ]

2 голосов
/ 26 августа 2011

Поскольку у них нет прав на редактирование .. я публикую ваш код с небольшими изменениями, посмотрите, работает ли он мой код

protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e) 
{ 
    if (DetailsView1.CurrentMode == DetailsViewMode.Insert) 
    { 
        if (Session["ProjectId"] != null) 
        { 
            int Projectid = Convert.ToInt32(Session["ProjectId"]); 
            string Description = (DetailsView1.FindControl("RadEditor1") as RadEditor).Content; 
            RadAsyncUpload radAsyncUpload = DetailsView1.FindControl("RadAsyncUpload1") as RadAsyncUpload; 

            UploadedFile file = radAsyncUpload.UploadedFiles[0]; 
            string s = file.FileName; 
            string path = System.IO.Path.GetFileName(s); 


            string Contenttype = radAsyncUpload.UploadedFiles[0].ContentType; 
            int fileSize = radAsyncUpload.UploadedFiles[0].ContentLength; 
            float length = float.Parse(fileSize.ToString()); 
            byte[] fileData = new byte[file.InputStream.Length]; 
            file.InputStream.Read(fileData, 0, (int)file.InputStream.Length); 


                    ProTrakEntities objEntity = new ProTrakEntities(); 
                    ProjectFile objFile = new ProjectFile(); 
                    objFile.ProjectId = Projectid; 
                    objFile.FileName = s; 
                    objFile.FileType = Contenttype; 
                    objFile.FileSize = length; 
                    objFile.CreatedBy = "admin"; 
                    objFile.CreatedDate = DateTime.Now; 
                    objFile.Description = Description; 
                    objFile.FileData = fileData; 
                    objEntity.AddToProjectFiles(objFile); 
                    objEntity.SaveChanges(); 

        } 
        DetailsView1.ChangeMode(DetailsViewMode.ReadOnly); 
        ClientScript.RegisterStartupScript(Page.GetType(), "mykey", "CloseAndRebind('navigateToInserted');", true); 

radAsyncUpload.UploadedFiles[0].SaveAs(Server.MapPath("Uploads/") + path); 

    } 
}
1 голос
/ 25 августа 2011

используйте вот так ..

RadAsyncUpload radAsyncUpload = InsertItem.FindControl("AsyncUpload1") as RadAsyncUpload;
        UploadedFile file = radAsyncUpload.UploadedFiles[0];      
        byte[] fileData = new byte[file.InputStream.Length];
        file.InputStream.Read(fileData, 0, (int)file.InputStream.Length);
...