0

私のホストの構造は次のとおりです。

/Web -> サイトのコンテンツはどこにありますか /Data -> フォルダーの読み書き権限

ファイルを Data フォルダにアップロードするにはどうすればよいですか? "~" はディレクトリ / web を返すため、以下のコードは機能しません。

//Save Image
var serverPath = Server.MapPath(Href("~/Data/") + id);
Directory.CreateDirectory(serverPath);
imgOri.Save(Path.Combine(serverPath, fileName));
4

2 に答える 2

2

Server.MapPath()は、アプリケーションのルートディレクトリまでのパスをマップするように設計されています。ルートの上にファイルをアップロードしようとしているので、それは機能しません。

正確なファイルパスを指定することにより、ルートの上にファイルをアップロードできます(ホストがファイルを提供できる場合)。

var serverPath = "C:\ YourFolder \ Data \")+ id);

これを行うには多くの危険があるため、ホストがルートディレクトリの外にファイルをアップロードすることを許可していることに驚いています...信頼の問題が発生する可能性もあります。

于 2011-07-01T21:21:45.687 に答える
1

次のようにServer.MapPathを使用して、サイトルートの同じレベルにあるディレクトリへのパスを取得できます。

@{
    var root = Server.MapPath(".");
    var temp = root.Split('\\');
    temp[temp.Length - 1] = "Data";
    var newpath = string.Join("\\", temp);
}

ホスティング会社は、Access mdbデータベースなどの安全な場所として、ルートフォルダの外に「データ」ディレクトリを提供していました。サイトのルート外にあるディレクトリを直接参照することはできません。ASP.NETは、の導入により、これらの必要性を排除しましたApp_Data。最近この種のフォルダを使用したい唯一の理由は、ディレクトリのコンテンツを提供する前に何らかの認証を適用したい場合です。次に、ハンドラーを使用する必要があります。そうしないと、単純なcshtmlファイルで十分です。WebSecurityヘルパーとヘルパーを組み合わせて、WebImage最初にユーザーを認証し、テストに合格した場合は画像を取得して表示できます。srcタグ内のimgは、クエリ文字列またはUrlData値を指定すると、表示する画像がわかります。

画像を表示する前にユーザーを検証する必要がない場合は、画像ファイルをルートの外部に保存すると、不必要なレベルの複雑さが増します。

于 2011-07-02T07:16:26.130 に答える