0

.NET を使用してイメージを作成しようとしています。以下は私が使用しているコードです。これはほとんどの場合問題なく動作しますが、ストリームが切断され、ファイルが破損していると推測することがあります。URL経由で画像を取得しています。

コードを修正してくれる人、または他に何ができるかについての洞察を提供してくれる人を本当に探しています。

ありがとう

// Function will return the number of bytes processed
        // to the caller. Initialize to 0 here.
        int bytesProcessed = 0;

        // Assign values to these objects here so that they can
        // be referenced in the finally block
        Stream remoteStream = null;
        Stream localStream = null;
        WebResponse response = null;

        // Use a try/catch/finally block as both the WebRequest and Stream
        // classes throw exceptions upon error
        try
        {
            // Create a request for the specified remote file name
            WebRequest request = WebRequest.Create(remoteFilename);
            if (request != null)
            {
                // Send the request to the server and retrieve the
                // WebResponse object 
                response = request.GetResponse();
                if (response != null)
                {
                    // Once the WebResponse object has been retrieved,
                    // get the stream object associated with the response's data
                    remoteStream = response.GetResponseStream();

                    // Create the local file
                    localStream = File.Create(localFilename);

                    // Allocate a 1k buffer
                    byte[] buffer = new byte[1024];
                    int bytesRead;

                    // Simple do/while loop to read from stream until
                    // no bytes are returned
                    do
                    {
                        // Read data (up to 1k) from the stream
                        bytesRead = remoteStream.Read(buffer, 0, buffer.Length);

                        // Write the data to the local file
                        localStream.Write(buffer, 0, bytesRead);

                        // Increment total bytes processed
                        bytesProcessed += bytesRead;
                    } while (bytesRead > 0);
                }
            }
        }
        catch (Exception e)
        {
            throw e;
        }
        finally
        {
            // Close the response and streams objects here 
            // to make sure they're closed even if an exception
            // is thrown at some point
            if (response != null) response.Close();
            if (remoteStream != null) remoteStream.Close();
            if (localStream != null) localStream.Close();
        }

次のエラーが表示されます。

Main Exception
MESSAGE: Parameter is not valid.
SOURCE: System.Drawing
TARGETSITE: System.Drawing.Image FromStream(System.IO.Stream, Boolean, Boolean)
STACKTRACE: at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
            at Sitecore.Resources.Media.ImageMedia.GetImage() at Sitecore.Resources.Media.ImageMedia.UpdateMetaData(MediaStream mediaStream)
            at Sitecore.Resources.Media.JpegMedia.UpdateMetaData(MediaStream mediaStream) at Sitecore.Resources.Media.MediaCreator.AttachStreamToMediaItem(Stream stream, String itemPath, String fileName, MediaCreatorOptions options)
            at Sitecore.Resources.Media.MediaCreator.CreateFromStream(Stream stream, String filePath, MediaCreatorOptions options)
            at Sitecore.Resources.Media.MediaCreator.CreateFromFile(String filePath, MediaCreatorOptions options)
4

1 に答える 1

1

問題は、Windows によってロックされているファイルにありました。基本的に、2つのサーバーがありました。ファイルを別のサーバーに保存する必要があり、すべて機能しました。

于 2012-07-27T19:37:02.213 に答える