Pergunta

Eu estou tentando obter o meu site para permitir aos usuários fazer upload de vários arquivos (HttpPostedFile), que são então armazenados em um banco de dados Oracle como BLOBs. Aqui está o que eu tenho até agora:

    public static bool insertFile(int pid, HttpPostedFile file, string filedesc)
    {
        string filename = file.FileName.Remove(0, file.FileName.LastIndexOf("\\") + 1);
        byte[] filebytearray = new byte[file.ContentLength];
        BinaryReader br = new BinaryReader(file.InputStream);
        filebytearray = br.ReadBytes(file.ContentLength);

        if (filedesc == string.Empty)
        {
            filedesc = "No description.";
        }
        OracleConnection conn = new OracleConnection(connectionString);
        OracleCommand cmd = new OracleCommand("database", conn);
        cmd.BindByName = true;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new OracleParameter("pfiledata", OracleDbType.Blob)).Value = filebytearray;
        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
            return true;
        }
        catch (Exception ex)
        {
            Errors.WriteToEventLog("File insert", ex);
            return false;
        }
        finally
        {
            conn.Dispose();
            cmd.Dispose();
            file.InputStream.Dispose();
        }
    }

O arquivo com sucesso fica carregado e descarregado - no entanto, o arquivo baixado não é o mesmo que o arquivo enviado. Eu já verificado que o conteúdo é o mesmo que o arquivo vai para dentro e fora do banco de dados, o que significa que o arquivo está ou não sendo convertido corretamente, ou ele não está sendo salvo corretamente pelo cliente. Os dois arquivos são idênticos em tamanho no disco, mas não com o Windows. Parece que a cópia transferida do arquivo está faltando 3 bytes no início do arquivo, de acordo com a editor hexadecimal.

Aqui está o que eu estou usando para transferir o arquivo para o cliente: Response.Clear (); Response.AddHeader ( "Content-Disposition", "fixação; nome do ficheiro =" + fileinfo [1]);
Response.AddHeader ( "Content-Length", filedata.Length.ToString ());
Response.ContentType = "aplicação / octeto de fluxo"; Response.BinaryWrite (filedata);

Qualquer ajuda seria apreciada.

Foi útil?

Solução

Uma grande parte do código de exemplo que eu estou vendo estados on-line

br.BaseStream.Position = 0;

Antes de leitura; Eu não vejo por que, mas é possível que você precisa para definir explicitamente a posição de início?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top