私はビジュアルスタジオ15で作業しています。私のアプリケーションでは、サイズが6MBのファイルをアップロードする必要があります。私はEntity Framework 6で.Net 4.5.1を使用しています。ビジュアルスタジオからサイズが6MBのファイルをアップロードできません
ファイルのアップロードを選択してチェックするために、次のスクリプトとhtmlコードがビューレベルの剃刀で書かれています。
$('#SaveResponse').click(function() {
var data = new FormData();
var files = $("#imagefile").get(0).files;
if (files.length > 0) {
data.append("UploadedImage", files[0]);
}
else
{
alert('You have not selected any File');
return;
}
$.ajax({
async: false,
cache: false,
type: "POST",
dataType: "json",
contentType: false,
processData: false,
url: "@(Url.RouteUrl("UploadFile"))",
data: data,
success: function (JsonCP) {
if (JsonCP.msg != null) {
if (JsonCP.msg.Key) {
alert(JsonCP.msg.Value);
$("#fileUpload").val('');
} else
alert(JsonCP.msg.Value);
}
},
error: function (JsonCP) {
alert(JsonCP.msg.Value);
}
});
});
<table>
<tr>
<td align="right" width="200px">@Html.Label("Select the File:")</td>
<td align="left" width="200px"><input type="file" id="imagefile" />
</td>
</tr>
<tr>
<td colspan="2" align="center"><input type="button" value="Save this
Response" id="SaveResponse" name="SaveResponse" /></td>
</tr>
</table>
次のコードは、ファイルをアップロードして適切なメッセージを表示するためにコントローラに書き込まれています。
[System.Web.Mvc.AcceptVerbs(HttpVerbs.Post)]
public ActionResult UploadFile()
{
UploadResponseModel rm = new UploadResponseModel();
try
{
if (System.Web.HttpContext.Current.Request.Files.AllKeys.Any())
{
var httpPostedFile =
System.Web.HttpContext.Current.Request.Files["UploadedImage"];
if (httpPostedFile != null)
{
string fileSavePath =
Path.Combine(HttpContext.Server.MapPath("~/UploadedFiles"),
Path.GetFileName(httpPostedFile.FileName));
httpPostedFile.SaveAs(fileSavePath);
rm.responseModel.response.ResponseImage =
System.IO.File.ReadAllBytes(filesavePath)
if (rm.responseModel.insertResponse() != 1)
rm.msg = new KeyValuePair<bool, string>(false,
"row is not saved successfully.");
else
rm.msg=new KeyValuePair<bool,string>(true,"File
uploaded Successfully.");
}
else
rm.msg = new KeyValuePair<bool, string>(false, "Could not
get the file.");
}
else
rm.msg = new KeyValuePair<bool, string>(false, "No file found to
Upload.");
}
catch (Exception ex)
{
rm.msg = new KeyValuePair<bool, string>(false, "Can not Upload the
file: " + ex.Message);
}
return Json(rm, JsonRequestBehavior.AllowGet);
}
}
次の関数は、ResponsesというSQLデータベーステーブルに行を挿入するために使用されます。
public int insertResponse()
{
using (Entities cntx = new Entities())
{
cntx.Responses.Add(this.response);cntx.Entry(this.response).
State = System.Data.Entity.EntityState.Added;
int ex=cntx.SaveChanges();
return ex;
}
}
responseImageと呼ばれる応答テーブルの列の1つは、fileStreamのデータ型です。別の列は、uniqueIdentifier型です。テーブル作成SQLは以下の通りです。
CREATE TABLE [dbo].[Responses] (
[ResponseId] UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL,
[ResponseImage] VARBINARY (MAX) FILESTREAM NULL,
CONSTRAINT [PK_Responses] PRIMARY KEY CLUSTERED ([ResponseId] ASC)
FILESTREAM_ON [FileStreamGroup], UNIQUE NONCLUSTERED ([ResponseId] ASC)
);
ウェブconfifファイルは、プログラムが正しく動作し、小さなサイズのファイルのための適切なメッセージを示し、この
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5.1" />
<httpRuntime targetFramework="4.5.1" maxRequestLength="3145728"
executionTimeout="9999999" useFullyQualifiedRedirectUrl="false"
minFreeThreads="8" minLocalRequestFreeThreads="4"
appRequestQueueLimit="1000"/>
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="3221225472" />
</requestFiltering>
</security>
のように設定されている、しかし、サイズ3メガバイトのファイルのためには、いずれも表示されません。エラーメッセージはメモリ不足でもありません。しかし、行とファイルは保存されます。なぜファイルをアップロードしてもメッセージが表示されないのですか?
Visual Studio 15:VS2015(v14.x)またはVS2017(v15.x)を意味しますか? –
私はあなたがクライアント側、サーバー側、およびSQL Serverロジックを持って参照してください。 3つのコンポーネントの最初の2つまたは後の2つの間に問題があるかどうかを確認するためにデバッグできましたか? –
問題は、サーバーがクライアントにメッセージを送信していないことです。 –