.NET creating corrupt files

2019-08-20 07:48发布

I am trying to create images using .NET. Below is the code that I am using. This works fine most of the time but sometimes I guess that the stream gets cut off and I have a corrupt file. I am getting the image via its URL.

I am really looking for someone to correct my code or provide me insight as to what else I can do.

Thanks

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

I'm getting the following error:

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)

标签: .net file stream
1条回答
Explosion°爆炸
2楼-- · 2019-08-20 08:24

The issue was with the file being locked by Windows. Basically, there were two servers. Saved the file on another server where it should have been and it all worked.

查看更多
登录 后发表回答