1

MVC を使用したファイル アップロードの実例を数多く見てきました。

ただし、次のように少し抽象化したいという別のアプローチに従いたいと思います。

FileService を導入し、それを依存関係としてコントローラーに注入したいと考えています。サービスにファイルをアップロードさせ、UploadedFile オブジェクトを返します。

私が今抱えている問題は、ファイル システムまたはアプリケーション ルートの正しい場所/ディレクトリにアップロードすることです。

コントローラーでは、Server呼び出すことができるオブジェクトにアクセスできServer.MapPath、魔法を実行します。以下では、オブジェクトではないため、そのオブジェクトにアクセスできませんController

以下のファイル システムまたはプロジェクト ルートの任意の場所にアップロードするにはどうすればよいですか?

public class FileService : IFileService
{
    private const string UploadBase = "/Files";

    public File UploadFile(HttpPostedFileBase file)
    {
        if (file != null)
        {
            string folder = DateTime.Today.Month + "-" + DateTime.Today.Year;

            string finalFolder = Path.Combine(UploadBase, folder);

            if (!Directory.Exists(finalFolder))
            {
               return Directory.CreateDirectory(finalFolder);
            }


            var filename = UploadFile(file, directoryInfo.Name + "/");


            var newFile = new File { ContentType = file.ContentType, FilePath = filename, Filename = file.FileName };

            return newFile;

        }

        return null;
    }

エラーは次のとおりです。 The SaveAs method is configured to require a rooted path, and the path '9-2013/037a9ddf-7ffe-4131-b223-c4b5435d0fed.JPG' is not rooted.

4

1 に答える 1

1

コメントで指摘されたことを再述べる:

仮想パスをコントローラー外の物理パスにマップする場合は、いつでもメソッドを使用できますHostingEnvironment.MapPath

于 2013-09-26T12:29:54.250 に答える