I have the following input
<input type="file" id="imagefiles" name="files[]" multiple accept="image/*" style="display:none;" />
This input receives up to 3 images
I am using javascript to give a post like this 'Imagem': $('#imagefiles').val(),
but in that case it only takes the first image, as I am using files[]
would like to know how do I access the 3 vector positions and assign in javascript .
Agradicmento @MagicHat for helping me in the past issue, has provided me the code to upload the images, follow the code I am using:
var fileSelect = document.getElementById("fileSelect");
var fileElem = document.getElementById("imagefiles");
fileSelect.addEventListener("click", function (e) {
fileSelect.style.cssFloat = "top";
fileSelect.style.marginRight = "10px";
fileSelect.style.marginTop = "-3px";
if (fileElem) {
fileElem.click();
}
e.preventDefault();
}
, false);
function handleFileSelect(evt) {
var list = document.getElementById("list").childElementCount;
var files = evt.target.files;
var qtde = files.length;
var nomes = fileElem.files;
var nome;
if (qtde > 3 || list > 2) {
alert('Erro! Número máximo de fotos é 3 !');
document.getElementById('imagefiles').value = "";
return;
} else {
for (var i = 0, f; f = files[i]; i++) {
if (!f.type.match('image.*')) {
continue;
}
var reader = new FileReader();
reader.onload = (function (theFile) {
return function (e) {
var span = document.createElement('span');
span.innerHTML =
'<div class="col-lg-4">' + "<a href='#'><img style='float:left;padding: 1px;height: 155px; margin-right:15px; width: 155px;border: 5px solid #c7c7c7;margin-top: 0px;' src='" + e.target.result + "'" + "title='" + escape(theFile.name) + "'/>" + '<img src="/Content/imagens/principais/close-button.png" style="height: 15px; width: 15px; margin-right:5px;">' + " </a></div>";
document.getElementById('list').insertBefore(span, null);
span.children[0].addEventListener("click", function (evt) {
span.parentNode.removeChild(span);
});
};
})(f);
reader.readAsDataURL(f);
}
return true;
}
}
document.getElementById('imagefiles').addEventListener('change', handleFileSelect, false);
EDIT: the complete part of the input:
<legend class="leg_img">Insira imagens</legend>
<fieldset id="upload_img" class="nf_class upload_img">
<input type="file" id="imagefiles" name="files[]" multiple accept="image/*" style="display:none;" />
<a href="#" id="fileSelect" class="btn btn-success" style="margin-bottom:10px">selecionar imagens</a>
<div id="list" style="margin-bottom:0;"></div>
</fieldset>
EDIT 2: Post:
$('#btnSubmit').click(function () {
NovaPublicacao();
})
function NovaPublicacao() {
var produtoData = {
'Titulo': $('#produtoTitulo').val(),
'Descricao': $('#produtoDescricao').val(),
'Imagem': $('#imagefiles').val()
// adicionando valores as variáveis
};
console.log(produtoData);
$("#disableModal").addClass("disabledbutton"), // disabilita a pagina
$('#loadingModal').show(); // Adiciona o Loading
$.ajax({
url: "/Produto/Publicar", //altere para o caminho que você vai querer mandar o post
type: "post", //tipo post
data: produtoData, //os dados
success: function (json) { //em caso de sucesso faça
if (json.isRedirect) {
window.location.href = json.redirectUrl;
}
},
error: function (jqXHR, textStatus, errorThrown) {//em caso de erro faça
console.log(textStatus, errorThrown);
}
});
}
EDIT 3: I'm going to explain a little bit about the Backend situation, these methods were not me who did it, but since they did not server but for the Administrator model, because they uploaded just 1 photo, I'll have to change it, but I still do not know how to get the information I need for it, so I have not changed it yet.
public JsonResult CriarPublica(string ProdutoId, HttpPostedFileBase uploadFile)
{
if (Web.Utils.Util.ExtensaoPermitidaImagem(Path.GetExtension(uploadFile.FileName.ToLower())))
{
int idProduto = Convert.ToInt32(SystemCriptografia.ToDescriptografaQueryString(ProdutoId));
var produto = ProdutoServico.GetById(idProduto);
if (produto == null)
return Json(new { Erro = true, Msg = ConfigurationManager.AppSettings["MSG_ERRO_DADOS"] });
int qntofotos = this.FotoProdutoServico.GetMany(p => p.ProdutoId == idProduto).Count();
if (qntofotos == produto.Loja.QntMaxFotosProduto)
{
return Json(new { Erro = true, Msg = ConfigurationManager.AppSettings["MSG_NUMERO_MAXIMO_FOTOS"] });
}
string NomeImagem = uploadFile.FileName.ToLower();
string ExtensaoImagem = Path.GetExtension(uploadFile.FileName.ToLower());
FotoProduto foto = new FotoProduto(idProduto, NomeImagem, ExtensaoImagem);
this.FotoProdutoServico.Add(foto);
int dimensao = Convert.ToInt32(ConfigurationManager.AppSettings["TAMANHO_FOTO_PRODUTO"]);
Image i = Image.FromStream(new MemoryStream(Web.Utils.Util.RedimensionarImagem(uploadFile.InputStream, dimensao)));
ProdutoServico.SalvarArquivoProduto(i, foto);
//-----INSERÇÃO NO MODELO ANTIGO!
produto.NomeImagem = produto.ProdutoId.ToString();
produto.Extensao = ExtensaoImagem;
this.ProdutoServico.Update(produto);
Image f = Image.FromStream(new MemoryStream(Web.Utils.Util.RedimensionarImagem(uploadFile.InputStream, dimensao)));
ProdutoServico.SalvarArquivos(i, produto);
//-----------------------
return Json(new { Atualizar = true, Msg = ConfigurationManager.AppSettings["MSG_IMG_ENVIADA"] });
}
else
{
return Json(new { Erro = true, Msg = ConfigurationManager.AppSettings["MSG_ERRO_EXTENSAO_IMAGEM"] });
}
}
}
OBS. Actually it has one more method but I'm still analyzing these backend methods, maybe I'll change them completely.