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.