Yahooの投稿では、ファイルを添付するときに、押すと「ファイルを追加する」ボタンがあり、ファイルを挿入するための1つのフィールドになります。コードは次のとおりです。
<a href = "javascript: addUploadFields ();" id = "attach_more"> Attach more files </ a>
どうすればMVCを実装できますか?
Yahooの投稿では、ファイルを添付するときに、押すと「ファイルを追加する」ボタンがあり、ファイルを挿入するための1つのフィールドになります。コードは次のとおりです。
<a href = "javascript: addUploadFields ();" id = "attach_more"> Attach more files </ a>
どうすればMVCを実装できますか?
ファイルアップロードコントロールを使用して複数のファイルをアップロードするには、シンプルで見やすいJQueryマルチファイルプラグインを使用します。このリンクを参照してくださいJQuery複数ファイルのアップロード
このライブラリとJQueryを含めるだけで、その構文は次のようになります。
<input type="file" class="multi"/>
多くの失敗した解決策を疲れさせた後、私はそれを手に入れました
http://lbrtdotnet.wordpress.com/2011/09/02/asp-net-mvc-multiple-file-uploads-using-uploadify-and-jqueryui-progressbar/
I kept the Url Values in a session
public JsonResult Upload(HttpPostedFileBase file)
{
if (Session["myAL"] == null)
{
al = new ArrayList();
}
else
al = (ArrayList)Session["myAL"];
var uploadFile = file;
if (uploadFile != null && uploadFile.ContentLength > 0)
{
string filePath = Path.Combine(HttpContext.Server.MapPath("~/Content/Uploads"),
Path.GetFileName(uploadFile.FileName));
al.Add(filePath);
Session["myAL"] = al;
uploadFile.SaveAs(filePath);
}
var percentage = default(float);
if (_totalCount > 0)
{
_uploadCount += 1;
percentage = (_uploadCount / _totalCount) * 100;
}
return Json(new
{
Percentage = percentage
});
}
その後、投稿作成アクションでそれらを取得しました
public ActionResult MultimediaCreate(MultimediaModel newMultimedia)
{
if (ModelState.IsValid)
{
db.submitMultimedia(newMultimedia);
al = (ArrayList)Session["myAL"];
foreach(string am in al)
{
MarjaaEntities me = new MarjaaEntities();
MultimediaFile file = new MultimediaFile();
file.MultmediaId = newMultimedia.id;
file.MultimediaFileUrl = am;
me.MultimediaFiles.AddObject(file);
me.SaveChanges();
Session.Remove("myAL");
}
return RedirectToAction("MultimediaIndex");
}
return View();
}
ファイルをアップロードできるコントローラーとアクションを作成する
複数のファイルのアップロードを実現するクライアント側プラグインを見つけます。私が非常にうまく機能していることがわかったのは、KendoUIによるUploadプラグインです。
Kendo UIを使用する場合は、次のことを開始する必要があります。
コントローラ:
[HttpPost]
public ActionResult Save(HttpPostedFileBase[] files) {
// The Name of the Upload component is "attachments"
foreach (var file in files) {
//Do Something
}
// Return an empty string to signify success
return Content("");
}
意見
<form action="/Controller/Action" method="post" enctype="multipart/form-data">
<input type="file" name="files[]" id="file" />
...
</form>
https://stackoverflow.com/questions/14575787/のようなほぼ同じ質問です。プラグインサポートマルチファイルアップロード。詳細が必要な場合はお知らせください。
あなたはのような多くのファイルアップローダーを使用することができます
そして、uはこのコードをアップロードに使用できます。このコードはクライアント側です。
<form enctype="multipart/form-data">
<input name="file" type="file" />
<input type="button" value="Upload" />
</form>
<progress></progress>
まず、必要に応じて検証を行うことができます。たとえば、ファイルのonChangeイベントで。
$(':file').change(function(){
var file = this.files[0];
name = file.name;
size = file.size;
type = file.type;
//your validation
});
$(':button').click(function(){
var formData = new FormData($('form')[0]);
$.ajax({
url: 'url', //server script to process data
type: 'POST',
xhr: function() { // custom xhr
myXhr = $.ajaxSettings.xhr();
if(myXhr.upload){ // check if upload property exists
myXhr.upload.addEventListener('progress',progressHandlingFunction, false); // for handling the progress of the upload
}
return myXhr;
},
//Ajax events
beforeSend: beforeSendHandler,
success: completeHandler,
error: errorHandler,
// Form data
data: formData,
//Options to tell JQuery not to process data or worry about content-type
cache: false,
contentType: false,
processData: false
});
});
function progressHandlingFunction(e){
if(e.lengthComputable){
$('progress').attr({value:e.loaded,max:e.total});
}
}
これがあなたのコントローラーです
[HttpPost]
public ActionResult Save(HttpPostedFileBase[] files) {
// The Name of the Upload component is "attachments"
foreach (var file in files) {
//Do Something
}
// Return an empty string to signify success
return Content("");
}
したがって、ajaxを使用したくない場合は、これを使用してください
@{
ViewBag.Title = "Upload";
}
<h2>
Upload</h2>
@using (Html.BeginForm(actionName: "Upload", controllerName: "User",
method: FormMethod.Post,
htmlAttributes: new { enctype = "multipart/form-data" }))
{
<text>Upload a photo:</text> <input type="file" name="files" multiple />
<input type="submit" value="Upload" />
}