Web フォーム アプリケーションで実行するのが非常に簡単なことについて、多くの発見された例に何時間も費やしましたが、成功しませんでした。つまり、1 つ以上のファイルをアップロードして、SQL サーバーに保存します。
Webフォーム(vb.net)では、これを行うことができます:
Dim fs As Stream = fileUpload1.PostedFile.InputStream
Dim br As New BinaryReader(fs)
Dim bytes As Byte() = br.ReadBytes(fs.Length)
'insert the file into database
Dim strQuery As String = "INSERT INTO files ([name], [type], [file]) VALUES (@Name, @ContentType, @Data)"
Dim cmd As New SqlCommand(strQuery)
cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = filename
cmd.Parameters.Add("@ContentType", SqlDbType.VarChar).Value() = contenttype
cmd.Parameters.Add("@Data", SqlDbType.Binary).Value = bytes
次に、データベース実行ステートメントを実行します...完了!
C# Web-API:
Web-Api を介してアップロードをファイルシステムに保存する、私が今持っている一見良い例は次のとおりです。
public Task<IEnumerable<FileDesc>> Old()
{
string folderName = "uploads";
string PATH = HttpContext.Current.Server.MapPath("~/" + folderName);
string rootUrl = Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.AbsolutePath, String.Empty);
if (Request.Content.IsMimeMultipartContent())
{
var streamProvider = new MultipartFormDataStreamProvider(PATH);
var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith<IEnumerable<FileDesc>>(t =>
{
if (t.IsFaulted || t.IsCanceled)
{
throw new HttpResponseException(HttpStatusCode.InternalServerError);
}
var fileInfo = streamProvider.FileData.Select(i =>
{
var info = new FileInfo(i.LocalFileName);
return new FileDesc(info.Name, rootUrl + "/" + folderName + "/" + info.Name, info.Length / 1024);
});
return fileInfo;
});
return task;
}
else
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted"));
}
}
データベースに送信できるように、各マルチパート ファイル コンテンツ ストリームを取得する方法がわかりません。MultipartMemoryStreamProvider と MultipartStreamProvider について話している投稿を見たことがありますが、それらの使用方法がわかりません。C# と Web-Api の初心者として、私は明らかに頭がいっぱいです。
データベースに送信するバイトを取得できるストリームにファイルの内容を取得する方法を教えてもらえますか?