同様の問題やいくつかのブログで多くのstackoverflow投稿を読んだことがありますが、Web APIを使用してviewModelと一緒にファイルを送信する方法、または一時的なデータを使用して保存する方法
私は、サーバーにファイルをアップロードすることができますangularJSディレクティブを持っているコードは次のようである:。
[HttpPost]
[Route("UploadFile")]
public async Task<HttpResponseMessage> UploadFile()
{
// Check if the request contains multipart/form-data.
if (Request.Content.IsMimeMultipartContent("form-data"))
{
try
{
var resultOut = new List<FileUploadResult>();
var streamProvider = new MultipartMemoryStreamProvider();
streamProvider = await Request.Content.ReadAsMultipartAsync(streamProvider);
foreach (
var item in
streamProvider.Contents.Where(c => !string.IsNullOrEmpty(c.Headers.ContentDisposition.FileName))
)
{
FileUploadResult file = new FileUploadResult()
{
FileName = item.Headers.ContentDisposition.FileName,
// Content = fileBytes, // No need to pass the info back as we're not going to read it save it yet
Key = Guid.NewGuid().ToString(),
Type = item.Headers.ContentDisposition.DispositionType
};
resultOut.Add(file);
//using (Stream stFileSource = new MemoryStream(await item.ReadAsByteArrayAsync())) {
// byte[] fileBytes;
// fileBytes = new Byte[stFileSource.Length];
// stFileSource.Read(fileBytes, 0, Convert.ToInt32(stFileSource.Length));
// FileUploadResult file = new FileUploadResult()
// {
// FileName = item.Headers.ContentDisposition.FileName,
// // Content = fileBytes, // No need to pass the info back as we're not going to read it save it yet
// Key = Guid.NewGuid().ToString(),
// Type = item.Headers.ContentDisposition.DispositionType
// };
// resultOut.Add(file);
//}
}
return Request.CreateResponse(HttpStatusCode.OK, resultOut.ToArray());
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.ToString());
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
またディレクティブは、プロパティにファイルの配列が保存されます私のユーザーフォームは、いくつかのファイルを削除することができます/追加します。より多くのファイルを作成し、ファイルと一緒にフォームから情報を保存したい(やや複雑なビューモデル)。私はそのプロを理解することができませんでした今のところブレイク。私がここに見る1つの可能性は、ファイルをリポジトリを使ってUploadFileメソッドにデータベースに保存することです。しかし、私は実際のテーブルではなく、代わりに一時的なテーブル(#FileInfoテーブルなど)に保存することをお勧めします。または、ファイル(バイナリコンテンツを含む)をいくつかのメモリオブジェクトに保存する方法があるので、モデルのデータを保存する準備ができたら、そのコンテンツを取り戻すことができますか?あなたは、一時的なリポジトリストレージの実装を示すか、または私のジレンマのための他のアイデアを与えることができますか?
私の問題は少し後方です。モデルのメインフォームには、これらのアップロードされたファイル(ファイル名)を表示するディレクティブがあり、そのうちのいくつかを追加したり削除したりすることができます。今度は情報を保存するときです。私はファイルの配列を持っています - 私はアップローダを再びインスタンス化する必要がありますか? – Naomi
必要なすべての情報とすべてのメタデータを1つの場所に集めることができれば、そこにアップローダを生成してアップロードすることができます。 – user3682091
私はその考えに取り組んでいます。このアプリケーションではhttps://github.com/danialfarid/ng-file-uploadを使用しています。したがって、私はコントローラに「アップロード」を追加し、コードでインスタンス化し、それがどのように機能するかを見ていきます。 – Naomi