簡體   English   中英

圖像上傳到FTP問題

[英]Image upload to FTP issue

我使用以下代碼將圖像上傳到我的FTP服務器,但我有一個問題。 如果我在上傳之前使用代碼檢查圖像的尺寸(高度和寬度),那么在FTP服務器中創建了.png文件,但它是空的(或格式無效),如果我刪除代碼來檢查尺寸,那么圖像上傳正確。 有沒有任何想法?

    public ActionResult UploadFile(int type, HttpPostedFileBase imagefile)
    {
        //check image height and width
        using (System.Drawing.Image image = System.Drawing.Image.FromStream(imagefile.InputStream, true, true))
        {
            if (image.Width > 160 || image.Height > 160)
            {
                //do something here
            }
        }//end check image height and width

        FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftpPath" + "/" + imagefile.FileName);
        request.Credentials = new NetworkCredential("ftpUserName", "ftpPassword");

        request.Method = WebRequestMethods.Ftp.UploadFile;
        var sourceStream = imagefile.InputStream;
        Stream requestStream = request.GetRequestStream();
        request.ContentLength = sourceStream.Length;
        int BUFFER_SIZE = imagefile.ContentLength;
        byte[] buffer = new byte[BUFFER_SIZE];
        int bytesRead = sourceStream.Read(buffer, 0, BUFFER_SIZE);
        do
        {
            requestStream.Write(buffer, 0, bytesRead);
            bytesRead = sourceStream.Read(buffer, 0, BUFFER_SIZE);
        } while (bytesRead > 0);
        sourceStream.Close();
        requestStream.Close();
        FtpWebResponse response = (FtpWebResponse)request.GetResponse();
        response.Close();
}

如上所述,當您將其加載到Image時,您正在讀取所有流。 但是,我不認為您可以在NetworkStream(您的InputStream )上重置位置(即“Seek”)。 一旦你閱讀它,它就消失了。

您可以做的一件事是創建一個MemoryStream並使用Stream.CopyTo將內容復制到其中。 然后,你可以用它做任何你喜歡的事情,包括將位置重置為0以“再次讀取它”。

//example of resetting a stream named "s"
s.Position = 0;

謝謝大家的答復,他們非常有幫助,但我修改了這個問題,通過對我的代碼稍作修改,我在閱讀輸入Stream后檢查了圖像尺寸。 可能有人覺得這很有幫助。

public string ftpUpload(HttpPostedFileBase imagefile, string filename)
        {
            var sourceStream = imagefile.InputStream;
            int BUFFER_SIZE = imagefile.ContentLength;
            byte[] buffer = new byte[BUFFER_SIZE];
            int bytesRead = sourceStream.Read(buffer, 0, BUFFER_SIZE);

            if (!CheckLogoDimension(sourceStream))
            {
                sourceStream.Close();
                return "error";
            }

            FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpRootPath + "/" + filename);
            request.Credentials = new NetworkCredential(ftpUserName, ftpPassword);

            request.Method = WebRequestMethods.Ftp.UploadFile;

            Stream requestStream = request.GetRequestStream();
            request.ContentLength = sourceStream.Length;
            do
            {
                requestStream.Write(buffer, 0, bytesRead);
                bytesRead = sourceStream.Read(buffer, 0, BUFFER_SIZE);
            } while (bytesRead > 0);
            sourceStream.Close();
            requestStream.Close();
            FtpWebResponse response = (FtpWebResponse)request.GetResponse();
            response.Close();

            return "Success";
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM