문제

사용자가 다양한 파일 (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에 따르면 그렇지 않습니다. HEX 편집기에 따르면 파일의 시작 부분에 파일의 다운로드 된 사본이 3 바이트가 없어진 것으로 보입니다.

다음은 파일을 클라이언트로 전송하는 데 사용하는 것입니다. response.clear (); response.addheader ( "Content-Disposition", "첨부 파일; filename =" + fileInfo [1]);
response.addheader ( "content-length", filedata.length.toString ());
응답 .ContentType = "Application/Octet-stream"; 응답 .BinaryWrite (FileData);

모든 도움이 감사하겠습니다.

도움이 되었습니까?

해결책

온라인 상태에서보고있는 많은 샘플 코드

br.BaseStream.Position = 0;

읽기 전에; 왜 그런지 모르겠지만 시작 위치를 명시 적으로 설정해야 할 가능성이 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top