Olá!
Como faço para fazer upload de uma imagem para o servidor sendo passada essa imagem através de input type="file" usando C# ASP.NET MVC 5 CORE?
Olá!
Como faço para fazer upload de uma imagem para o servidor sendo passada essa imagem através de input type="file" usando C# ASP.NET MVC 5 CORE?
Oi Diego,
Aqui tem um step-by-step:
http://www.c-sharpcorner.com/article/upload-files-in-asp-net-mvc-5/
João, peguei o código que você passou, mas adaptei pra usar em um formulário de html que recebe outros dados também, mas o arquivo que quero fazer upload sempre vai como null para o controller. Sabe me dizer o porquê?
segue meu código:
//...continuação do código
public ActionResult CadastroEmpresa(Empresa empresa, Responsavel responsavel, HttpPostedFile file)
{
//condição para não permitir que usuário que não seja Administrador consiga acessar a página
if ((string)Session["perfil"] == "ADMINISTRADOR" || (string)Session["perfil"] == "DESENVOLVEDOR")
{
if (empresa.CodEmpresa == null)
{
empresa.CodEmpresa = 0;
}
if (empresa.NumInscricao == null)
{
empresa.NumInscricao = "ISENTO";
}
if(file.ContentLength > 0)
{
string _FileName = Path.GetFileName(file.FileName);
string _path = Path.Combine(Server.MapPath("~/UploadedFiles"), _FileName);
file.SaveAs(_path);
}
//var imagem = empresa.Logo;
//string urlArquivo = "https://www.google.com.br/search?q=imagens&rlz=1C1CHZL_pt-BRBR761BR761&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjo56jc9uHXAhVJIZAKHVrIBy4Q_AUICigB&biw=1360&bih=672#imgrc=SWU-4lrUQU5tHM:";
//string caminhoArquivo = @"C:\Users\diego.grossi\Documents\Projetos C# ASP.NET\Araguaina Team Foundation Ricardo\PortalAraguaina\Content\Imagens\LogosEmpresas\";
//System.Net.WebClient client = new System.Net.WebClient();
//client.DownloadFile(urlArquivo, caminhoArquivo);
//FileStream Stream = new FileStream(caminhoArquivo, FileMode.Open, FileAccess.Read);
//empresa.CaminhoLogo = caminhoArquivo;
EmpresaDAO dao = new EmpresaDAO();
dao.Adiciona(empresa, responsavel);
Session["alertaSucesso"] = "Registro Incluido!";
//return View("FormEmpresa");
return RedirectToAction("ListaEmpresa");
}
Session["alertaErro"] = "Seu usuário não tem permissão para acessar a página selecionada";
return RedirectToAction("Index", "Usuario");
}
//...continuação do código
<div class="form-row">
<div class="form-group">
<label for="logo">Insira o Logo da Empresa:</label>
@Html.TextBox("file", "", new { type = "file" }) <br />
@*<input type="submit" value="Upload" />*@
@*<input class="form-control form-control-sm" id="logo" type="file" name="empresa.Logo"/>*@
</div>
</div>
<div class="form-row">
<div class="form-group col-md-4">
<label for="CodResponsavel">Empresa Responsável:</label>
<select id="CodResponsavel" name="Empres.CodResponsavel" class="form-control form-control-sm">
@foreach (var Empres in ViewBag.Responsavel)
{
<option value="@Empres.CodResponsavel">@Empres.CodResponsavel - @Empres.DsResponsavel</option>
}
</select>
</div>
</div>
<div class="form-row">
<div class="form-group">
<button type="submit" class="btn btn-sm btn-dark">Cadastrar</button>
</div>
<div class="form-group">
<a href="@Url.Action("ListaEmpresa", "Empresa")" class="btn btn-sm btn-primary ml-md-2">Lista Empresas</a>
</div>
<div class="form-group">
<a href="javascript:window.history.go(-1)" class="btn btn-sm btn-danger ml-md-2">Voltar</a>
</div>
</div>
</form>
</div>
//...restante do código
Oi Diego, Você postou parte do código e podem ser algumas coisas. Verificaestes dois itens:
enctype="multipart/form-data "
2: Configurar o max length do request:
<configuration>
<system.web>
<httpRuntime maxRequestLength="?" />
</system.web>
</configuration>
João, no meu form está assim:
<form method="post" action="~/Empresa/CadastroEmpresa" class="formulario col-md-10" enctype="multipart/form-data">
e no Web.Config está assim:
<system.web>
<compilation debug="true" targetFramework="4.5"/>
<httpRuntime/>
<httpModules>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/>
</httpModules>
<pages controlRenderingCompatibilityVersion="4.0"/>
</system.web>
João, tive pesquisando em outros foruns e tem uma pergunta semelhante a minha, e a última resposta fala que não é possível enviar no mesmo formulário um arquivo com as outras informações. A pergunta é de 2014, não sei se hoje já mudou. Mas a nível de conhecimento segue o link da pergunta de outra fonte: https://pt.stackoverflow.com/questions/26475/como-fazer-um-post-que-passe-al%C3%A9m-do-formul%C3%A1rio-um-arquivo
Última dúvida. Tem como eu salvar o arquivo em um caminho físico(alguma pasta do computador que não pertence ao projeto)? O exemplo salva em um diretório virtual
string _path = Path.Combine(Server.MapPath("~/UploadedFiles"), _FileName);
file.SaveAs(_path);
Oi Diego, O Server.MapPath trabalha somente com pastas que pertencem ao seu projeto. Para especificar um caminho físico, use:
var fileName = Path.GetFileName(fileurl.FileName);
fileurl.SaveAs(Path.Combine(@"c:\projects", fileName));
É necessário garantir que o a conta a qual seu pool de aplicativos está executando tenha permissão para gravar na pasta.
João! É isso mesmo! Consegui salvar em local fisico! Muito obrigado!