2

ビデオ ファイル .mov を Fiddle Debugger からリモート Web サービスにアップロードしてサービスをテストしようとしていますが、ディスクに保存されているファイルが破損していますか? 助言がありますか?

リクエスト ヘッダー

Content-Type: multipart/form-data; boundary=-------------------------acebdf13572468
User-Agent: Fiddler
Host: localhost:2487
Content-Length: 2113228

リクエスト本文

---------------------------acebdf13572468
Content-Disposition: form-data; name="IMG_0888.MOV"; filename="IMG_0888.MOV"
Content-Type: video/quicktime

<@INCLUDE *C:\Users\Amrit\Desktop\IMG_0888.MOV*@>
---------------------------acebdf13572468--

C# コード

     FileStream fs = null;
            string UniqueId = this.GenerateUID();
            _fileDirectory = System.IO.Path.Combine(Constants._VideosDirectory,author_id);
            if (!Directory.Exists(_fileDirectory))
            {
                Directory.CreateDirectory(_fileDirectory);
            }
            string file = Path.Combine(_fileDirectory, "test.mov");
  //        string filePath = Path.Combine(uploadFolder, request.FileName);

            try
            {
                using (FileStream targetStream = new FileStream(file, FileMode.Create,
                                 FileAccess.Write, FileShare.None))
                {
                    //read from the input stream in 65000 byte chunks

                    const int bufferLen = 65000;
                    byte[] buffer = new byte[bufferLen];
                    int count = 0;
                    while ((count = request.Read(buffer, 0, bufferLen)) > 0)
                    {
                        // save to output stream
                        targetStream.Write(buffer, 0, count);
                    }
                    targetStream.Close();
                    return "done";
                    //sourceStream.Close();
                }
            }


            catch (Exception)
            {
                return "fail";
            }
            finally
            {

            }
4

1 に答える 1

2

Andras が指摘しているように、コンテンツだけでなくリクエスト全体をディスクに保存している可能性がありますが、ファイルの先頭に Unicode バイト オーダー マーク (BOM) を保存している可能性が高くなります (これは一部の.NET ストリームの)。

最初にすべきことは、保存されたファイルの長さと元の長さを確認することです。新しいファイルの長さはおそらく 3 バイト長くなります。これは、BOM が追加されたことを示しています。

確認するには、両方のファイルを 16 進エディターで開き、内容がどのように見えるかを確認してから、これをソース ファイルと比較します。2 つの 16 進数ファイルを比較するときは、最初の数文字と最後の数文字のみを確認する必要があります (最後の文字が異なる場合は、ストリームが完了していないことを意味し、ファイルが切り捨てられていることを意味します。最初の文字が異なる場合は、BOM があることを意味します)。添付)。

おそらく使用する必要があるFile.WriteBytesのは、これの代わりにFileStream、BOM が含まれないようにすることです。

于 2012-04-26T07:33:50.777 に答える