1

私のウェブサイトに画像をアップロードするために使用している次のコードがあります。画像は最初に一時フォルダーにアップロードされ、その後サイズが変更され、その後新しい画像がメインの画像フォルダーにアップロードされます。

FileUpload1.SaveAs(Server.MapPath("~/TEMP/tmpimg.jpg"));
System.Drawing.Image originalImage = System.Drawing.Image.FromFile(Server.MapPath("~/TEMP/tmpimg.jpg"));
System.Drawing.Image MainImg = new SPCL().ResizeImage(originalImage, 700, 600, false);
MainImg.Save(Server.MapPath("~/Images/Home/Home1.jpg"));

これにより、次の例外が発生します。

System.IO.FileNotFoundException: C:\site\wwwroot\TEMP\tmpimg.jpg at System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement) at Settings.saveImages() at Settings.saveSettings()
at System.Drawing.Image.FromFile(String filename, Boolean useEmbeddedColorManagement) at Settings.saveImages() at Settings.saveSettings()

フォルダーにすべての書き込み権限を設定し、Web サイトのすべてのフォルダーですべての権限を有効にしてみました (イライラしたとき;))

この行でエラーが発生していますSystem.Drawing.Image.FromFile(Server.MapPath("~/TEMP/tmpimg.jpg"));

指定されたパスにファイルが作成されていません。なぜこれが起こっているのか、どうすればこの問題を解決できますか?

4

2 に答える 2

2

FileUpload.SaveAs() メソッドから名前またはファイルをハードコーディングしている理由がわかりません このようなことを試してください

FileUpload1.SaveAs(Path.Combine(Server.MapPath("~/TEMP/"), FileUpload1.FileName));

サーバールートにフォルダーがある場合は、それをTemp/someFolderName /に追加する必要があります。そのフォルダーに書き込むには、仮想ディレクトリも設定してみてください。

このようなものもできます

FileUpload1.PostedFile.SaveAs(Path.Combine(Server.MapPath("~/TEMP/"), FileUpload1.FileName));

HttpPostedFileClass

MSDN から参照されています。これはテスト済みなので、このようなものに従うことができます。このコードが機能しない場合は、おそらくアクセス許可の問題であることに注意してください。

protected void Page_Load(object sender, EventArgs e)
{
    if(IsPostBack)
    {
        Boolean fileOK = false;
        String path = Server.MapPath("~/UploadedImages/");
        if (FileUpload1.HasFile) 
        {
            String fileExtension = 
                System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
            String[] allowedExtensions = 
                {".gif", ".png", ".jpeg", ".jpg"};
          for (int i = 0; i < allowedExtensions.Length; i++)
          {
               if (fileExtension == allowedExtensions[i])
               {
                    fileOK = true;
               }
          }
        }

        if (fileOK)
        {
            try
            {
                FileUpload1.PostedFile.SaveAs(path 
                    + FileUpload1.FileName);
                Label1.Text = "File uploaded!";
            }
            catch (Exception ex)
            {
                Label1.Text = "File could not be uploaded.";
            }
        }
        else
        {
            Label1.Text = "Cannot accept files of this type.";
        }
    }
}
于 2013-01-12T19:26:42.163 に答える
1

さて、私はついに問題の解決策を見つけました。そして、将来、他の誰かの同じ問題を解決できることを期待して、回答を投稿します。

FileUpload Control を囲んでいた更新パネルを削除することで、この問題を解決しました

また、更新パネルを削除せずにこの問題を解決するために、このリンク更新パネルをファイル アップロード[参照元: Shadow Wizard] で確認することもできます。

于 2013-01-13T12:10:32.800 に答える