2

私はMVCアプリを持っていて、ftpアクセスしかできないサーバーにデプロイしました。アプリの名前はtest.foo.com. ユーザーがアプリに写真をアップロードするバックエンドがあります。すべてがうまく機能します。コードは次のとおりです。

//in web config this is the value
<add key="NewsImagesPath" value="~/App_Data/NewsImages/" />

// this is in controller
private static readonly string news_images_path = ConfigurationManager.AppSettings["NewsImagesPath"]; 

// in the method
String uploadedFile = fileUploadHelper.UploadFile(file, Server.MapPath(news_images_path));

ここでは、アップロードされたパスを返す fileuploadhelper:

public class FileUploadHelper
{
    public string UploadFile(HttpPostedFileBase file, string path)
    { 
        if (file != null && file.ContentLength > 0)
        { 
            FileInfo fileInfo = new FileInfo(file.FileName);
            string fileName = Guid.NewGuid() + fileInfo.Extension;
            var uploadPath = Path.Combine(path, fileName);

            file.SaveAs(uploadPath);
            return uploadPath;
        }

        return null;
    } 
}

さて、このコードは正常に動作します。

問題は、このアプリが にデプロイされたときですfoo.com。写真はまだtest.foo.comApp_Data フォルダーにアップロードされています。

例: foo.com から画像をアップロードしており、画像は次の場所に保存されています。

c:\inetpub\wwwroot\test.foo.com\App_Data

一方、それはに行く必要があります

c:\inetpub\wwwroot\foo.com\App_Data

なぜこうなった?

サーバー、IIS がどのように構成されているかわかりません。

4

1 に答える 1

2

Server.MapPath("~")ASP.NETアプリケーションが実行されるように構成されている物理ルートフォルダーを指しています。したがって、IISにはいくつかの構成があり、両方test.foo.comfoo.comが実際に同じアプリケーションを指していると思います。これを確認するためのサーバーへのアクセス権がない場合は、ホスティングプロバイダーに連絡して、これらのドメインがどのように設定され、どのアプリケーションにマッピングされているかについての詳細を尋ねる以外にできることはほとんどありません。

于 2012-12-31T23:06:28.570 に答える