Несоответствие файла до и после загрузки в базу данных Oracle.

StackOverflow https://stackoverflow.com/questions/1190721

Вопрос

Я пытаюсь заставить свой веб-сайт разрешить пользователям загружать различные файлы (HttpPostedFile), которые затем сохраняются в базе данных Oracle в виде BLOB-объектов.Вот что у меня есть на данный момент:

    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();
        }
    }

Файл успешно загружается и загружается, однако загруженный файл не совпадает с загруженным файлом.Я уже убедился, что содержимое такое же, как и у файла, который он входит в базу данных и из нее, а это означает, что файл либо не конвертируется правильно, либо он неправильно сохраняется клиентом.Эти два файла идентичны по размеру на диске, но не в соответствии с Windows.По данным шестнадцатеричного редактора, в загруженной копии файла отсутствуют 3 байта в самом начале файла.

Вот что я использую для передачи файла клиенту:Ответ.Очистить();Response.AddHeader("Content-Disposition", "attachment;имя_файла=" + информация о файле[1]);
Response.AddHeader("Content-Length", filedata.Length.ToString());
Response.ContentType = "application/octet-stream";Response.BinaryWrite(данные файла);

Любая помощь будет оценена по достоинству.

Это было полезно?

Решение

Многие примеры кода, которые я вижу в онлайн-состояниях

br.BaseStream.Position = 0;

Перед чтением;Я не понимаю почему, но возможно ли, что вам нужно явно указать начальную позицию?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top