Мне нужна помощь в загрузке файла в папку на моем сервере и последующем добавлении сведений о файле в базу данных. - PullRequest
0 голосов
/ 27 марта 2012

Я пытаюсь создать страницу для своего сайта, где пользователи могут загрузить игру, дать ей имя, после чего файл загружается в папку на моем сайте, а имя файла и имя игры добавляются в мою базу данных sql, но это выдает ошибку, говорящую: «System.ArgumentOutOfRangeException: индекс был вне диапазона. Должен быть неотрицательным и меньшим, чем размер коллекции. Имя параметра: индекс ", когда я пытаюсь запустить его.

Мой код для этой страницы:

@{
var db= Database.Open("Games");
var sqlQ = "SELECT * FROM Games";
var data = db.Query(sqlQ);   

}
@{
 var fileName = "";
if (IsPost) {
    var fileSavePath = "";
    var uploadedFile = Request.Files[0];
    fileName = Path.GetFileName(uploadedFile.FileName);
    fileSavePath = Server.MapPath("~/App_Data/UploadedFiles/" +
      fileName);
    uploadedFile.SaveAs(fileSavePath);
}
 var GameName="";
 var GameGenre="";
 var GameYear="";
 if(IsPost){
GameName=Request["formName"];
var SQLINSERT = "INSERT INTO Games (Name, file_path) VALUES (@0, @1)";
db.Execute(SQLINSERT, GameName, fileName);
Response.Redirect("default.cshtml");
   }
}

<h1 >Add a new game to the database</h1>
<form action="" method="post">
<p>Name:<input type="text" name="formName" /></p>
@FileUpload.GetHtml(
    initialNumberOfFiles:1,
    allowMoreFilesToBeAdded:false,
    includeFormTag:true,
    uploadText:"Add")

На странице с ошибкой сказано, что проблема в строке 11, но я не знаю, что изменить.

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Как правильно сказал Hightechrider, ваш код должен находиться в контроллерах, а не в представлениях.Исключение, которое вы получаете, состоит в том, что Request.Files - пустой массив, поэтому, когда вы пытаетесь получить доступ к элементу [0], вы получаете ошибку IndexWasOutOfRange.

Я бы рекомендовал вам прочитать следующую статью для загрузки файлов в ASP.NET MVC.Он представляет более простую, более согласованную и гибкую модель, помещая код в действие контроллера.По сути, весь код сводится к следующему:

  1. Вы создаете форму загрузки с кнопкой отправки и вводом файла.
  2. Вы создаете действие, которое принимает переменную HttpPostedFileBase.
0 голосов
/ 27 марта 2012

Если вы хотите загружать файлы, вы должны установить правильный тип для вашей формы:

<form action="" method="post" enctype="multipart/form-data">
...