5

そのため、まだ誰もこれを試みていないか、何も見つけられていません。ファイルをアップロードする古い方法は次のとおりです。

public class FileStorage
{
    public string FileName { get; set; }
    public byte[] FileStore { get; set; }
}

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Create(HttpPostedFileBase file)
{
    FileStorage fileAttachment = new FileStorage();
 
    using (Stream inputStream = file.InputStream)
    {
        MemoryStream memoryStream = inputStream as MemoryStream;
 
        //Check to see if stream returned is already a MemoryStream
        if(memoryStream == null)
        {
            memoryStream = new MemoryStream();
            inputStream.CopyTo(memoryStream);
        }
                
        fileAttachment.FileStore = memoryStream.ToArray();
        fileAttachment.FileName = file.FileName;
    }
 
    if (ModelState.IsValid)
    {
        db.FileAttachment.Add(fileAttachment);
        await db.SaveChangesAsync();
        return RedirectToAction("Index");
    }
 
    return RedirectToAction("Index");
}

.Net Core が使用していることは知っていますIFormFileが、それを保存するために見つけたすべてのリソースは、Web サーバーの wwwroot フォルダーに保存することについて話しています。ファイルをコントローラーに正常に渡していますがbyte[]、DBFileStreamテーブルに保存するためにファイルを変換する方法がわかりません。

これが私の現在のコードです:

[HttpPost]
public async Task<IActionResult> Upload(IFormFile uploadFile)
{
    if (ModelState.IsValid)
    {
        var parsedContent = ContentDispositionHeaderValue.Parse(uploadFile.ContentDisposition);
        var fileName = Path.Combine(_hostingEnvironment.WebRootPath, "Uploads", parsedContent.FileName.Trim('"'));
        
        await uploadFile.SaveAsAsync(fileName);
        
    }

    return View("Index");
}

DBで動作するように変換するにはどうすればよいですかFileStream

4

1 に答える 1

6

SQL Server のファイル ストリームへの書き込み方法については多くの記事があるように思われるので、ここでは言及しません。

IFormFileCopyToAsync使用できる方法があります。SQL Server のファイル ストリームを取得したとしましょう。必要な作業は次のとおりです。

await formFile.CopyToAsync(targetSqlFileStream);

于 2016-07-08T20:38:19.517 に答える