سؤال

أحاول الحصول على موقع الويب الخاص بي للسماح للمستخدمين بتحميل الملفات المختلفة (httppostedfile)، والتي يتم تخزينها بعد ذلك في قاعدة بيانات Oracle كقطر. إليك ما لدي حتى الآن:

    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 بايت في بداية الملف، وفقا لمحرر HEX.

هنا هو ما أستخدمه لنقل الملف إلى العميل: Response.clear ()؛ Response.AddDheader ("التصرف بالمحتوى"، "المرفق؛ اسم الملف =" + fileinfo [1])؛
Response.Addheader ("طول المحتوى"، filedata.length.tostring ())؛
Response.ContentType = "تطبيق / Octet-Stream"؛ Response.Binarywrite (Filedata)؛

سيكون موضع تقدير أي مساعدة.

هل كانت مفيدة؟

المحلول

الكثير من التعليمات البرمجية العينة التي أراها الولايات عبر الإنترنت

br.BaseStream.Position = 0;

قبل القراءة؛ لا أرى السبب، لكن هل من الممكن أن تحتاج إلى تعيين موقف البداية بشكل صريح؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top