6

まず、私のコードは次のとおりです。

private Shoe ProcessForm(Shoe shoe, HttpPostedFileBase image)
{
    try
    {
        shoe.Slug = CMSHelper.SanitizeTitle(shoe.Name);
        shoe.LastModification = DateTime.Now;

        if ((image != null) && (image.ContentLength > 0))
        {
            string fileName = String.Concat(shoe.ShoeId, Path.GetExtension(image.FileName));
            shoe.Image = fileName;

            string filePath = Path.Combine(Server.MapPath(shoe.ImagePath), fileName);
            image.SaveAs(filePath);
        }
    }
    catch (Exception e)
    {
        throw e;
    }

    return shoe;
}

ローカルでは、このコードは正常に機能します。ディレクトリの権限は問題ありません。また、以前は他のサーバーでランダムに機能していました(VPSプロバイダーをテストしているときに、このコードを4つまたは5つの異なるサーバーでテストしました)。

しかし、自宅のコンピューターから実行しようとすると、すべて問題なく通過します。データベースにはファイル名が保存されていますが、ファイルはアップロードされていません。そして、例外はありません!!!

私はこれをほぼ3日間修正しようとしてきましたが、役に立たない時間がたくさんあります。助けてください...これの何が問題なのかわかりません...

4

7 に答える 7

5

あなたのビューモデルは何ですか?まず、(靴の靴、HttpPostedFileBase画像)を(FormCollection formCollection)に置き換えます。その上にブレークポイントを設定して、送信されたすべての値を取得していることを確認します。その場合、モデルバインディングに問題があり、それに対処する必要があります。

編集

ブレークポイントを設定していただけますか

image.SaveAs(filePath); 

fileName変数とfilePath変数の監視を追加します。サーバーパスが期待どおりではないか、間違ったフォルダーを一緒に探している可能性があります。それらの変数の値を教えてください。また、通過するときに例外がスローされないことを確認してくださいimage.SaveAs(filePath);

于 2011-10-05T08:57:48.200 に答える
4

私はついに非常にうまくやっている回避策をしました。私は自分の仕事でさえ尋ねました、そして誰もがまったく悪いことは何もないと言いました。だからここにそれをねじ込みます私がしたことです:

.SaveAs()を呼び出す代わりに、次のようなメソッドを作成しました。

public static void WriteFileFromStream(Stream stream, string toFile)
{
    using (FileStream fileToSave = new FileStream(toFile, FileMode.Create))
    {
        stream.CopyTo(fileToSave);
    }
}

私はそれをこのように呼びます:

CMSHelper.WriteFileFromStream(image.InputStream, filePath);

以上です。

于 2011-10-19T04:20:22.980 に答える
2

image.FileNameパスデータを含み、によって選択されます

Path.Combine(Server.MapPath(shoe.ImagePath), fileName)

次のようなものを試してください:

string pathForSaving = Server.MapPath("~/Upload/Images");
string uploadFileName = System.IO.Path.GetFileName(image.FileName);
string uploadFilePathAndName = Path.Combine(pathForSaving, uploadFileName);
image.SaveAs(uploadFilePathAndName);
于 2013-12-31T06:47:42.117 に答える
0

どのようにshoe.ImagePathを設定していますか?あなたの問題は、Server.MapPathが予期しない値を返しているように感じます。

于 2011-10-17T13:25:40.487 に答える
0

複数のWebサーバーがあるかどうかを確認しましたか?おそらくロードバランサーのように。実際には例外がなく、ファイルが実際にどこかに存在しているため、例外がスローされていない可能性があります。ファイルが存在していると思われるサーバー上ではありません。ただの考え(それは以前私に起こったことがあります)。

于 2011-10-24T03:45:27.447 に答える
0

フォームでenctype="multipart/form-data"を使用していることを確認してください

http://www.prideparrot.com/blog/archive/2012/8/uploading_and_returning_files

于 2013-07-11T21:22:11.797 に答える
0

また、このスレッドに投稿された同じ問題に遭遇し、ファイルのアップロードを数回試みた後、ファイルがあるはずのフォルダーを更新し、最終的にそこでそれらを確認しました。最初の更新後に初めて表示されなかった理由はわかりませんが、フォルダの更新と関係がある可能性があります。Visual Studio内から更新を行い、[すべてのファイルを表示]ボタンもオンにしました。

于 2016-03-29T17:07:24.340 に答える