es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Subir archivo guardando la carpeta en lugar del archivo.

Estoy realizando la carga de archivos en la base de datos con RadAsyncUpload de Telerik para ASP.NET, que es muy similar a fileUpload normal.

Mi problema es que, al usar la variable para almacenar los datos, se guarda como “null”. Alternativamente, intenté usar Server.MapPath, que guarda la ubicación de la carpeta en lugar del archivo.

¿Qué estoy haciendo mal?

//Declaraciones de clase parciales
   (...)
   string Ficheiro = string.Empty;
   string FileTipo = string.Empty;
   byte[] fileBytes = null;

//Método de guardado, activado por el botón de guardar después de la carga
  public void SaveFile(object sender, EventArgs e)
    {
        ListagemTimesheet model = new ListagemTimesheet();

        model.IDRecursoHumano = Convert.ToInt32(rdpInvestigadorE.Text);
        model.IDEstadoTimesheet = Convert.ToInt32(rcbEstado.SelectedValue);
        model.Observações = Obervaçoestxt.Text;
        model.AssinaturaTimesheet = txtAssinaturaTimesheet.Text;
        model.DataEnvio = DataEnvio.SelectedDate.Value;

        if (Objecto.ID > 0)
        {
            model.ID = Convert.ToInt32(FileID.Text);

            if (!string.IsNullOrEmpty(Ficheiro) && FileTipo != null)
            {

                model.FileName = Path.GetFileNameWithoutExtension(Ficheiro); //NombreArchivo
                model.FileTipo = Path.GetExtension(FileTipo); //ExtensiónArchivo
                model.FileContent = fileBytes; //Contenido null
                model.FileContent = Encoding.ASCII.GetBytes(HttpContext.Current.Server.MapPath("~/TargetFiles/ + model.FileName")); //El contenido guardado es la ubicación de la carpeta

//Método de carga
public void RadAsyncUpload1_FileUploaded(object sender, FileUploadedEventArgs e)
    {
        RadAsyncUpload1.Visible = false;
        Stream fileStream = e.File.InputStream;
        Ficheiro = e.File.FileName; //sintaxis método
        FileTipo = e.File.ContentType;
        e.IsValid = true;
        byte[] fileBytes = new byte[fileStream.Length - 1 + 1];
        fileStream.Read(dados, 0, System.Convert.ToInt32(fileStream.Length));
        fileStream.Close();
    }
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Según el código proporcionado, parece que el problema radica en la forma en que se establece el fileContent en el modelo. En lugar de obtener el contenido del archivo cargado, el código está utilizando HttpContext.Current.Server.MapPath para obtener la ruta del archivo que está guardando la ubicación de la carpeta en lugar del archivo.

    Para solucionar esto, debe establecer fileContent utilizando la matriz de bytes que se leyó del fileStream en el método RadAsyncUpload1_FileUploaded. Actualice la siguiente línea:

    model.FileContent = Encoding.ASCII.GetBytes(HttpContext.Current.Server.MapPath("~/TargetFiles/" + model.FileName));

    A:

    model.FileContent = fileBytes;

    Esto debería guardar el contenido del archivo cargado en la base de datos en lugar de la ubicación de la carpeta.

Comments are closed.