Comment puis-je définir la valeur de cela?
<input type="file" />
Comment puis-je définir la valeur de cela?
<input type="file" />
Réponses:
Vous ne pouvez pas, pour des raisons de sécurité.
Imaginer:
<form name="foo" method="post" enctype="multipart/form-data">
<input type="file" value="c:/passwords.txt">
</form>
<script>document.foo.submit();</script>
Vous ne voulez pas que les sites Web que vous visitez puissent le faire, n'est-ce pas? =)
Tu ne peux pas.
La seule façon de définir la valeur d'une entrée de fichier est par l'utilisateur de sélectionner un fichier.
Cela se fait pour des raisons de sécurité. Sinon, vous seriez en mesure de créer un JavaScript qui télécharge automatiquement un fichier spécifique à partir de l'ordinateur du client.
Pas une réponse à votre question (à laquelle d'autres ont répondu), mais si vous voulez avoir une fonctionnalité d'édition d'un champ de fichier téléchargé, ce que vous voulez probablement faire est:
<input>
balise pour télécharger un nouveau fichier<input type="file" />
image du produit existante? Je peux montrer l'image existante dans une <img />
balise mais lorsque je soumets, le fichier ne passe pas.
Comme tout le monde ici l'a déclaré: Vous ne pouvez pas télécharger un fichier automatiquement avec JavaScript.
TOUTEFOIS! Si vous avez accès aux informations que vous souhaitez envoyer dans votre code (c.-à-d. Pas à passwords.txt), vous pouvez le télécharger en tant que type blob , puis le traiter comme un fichier.
Ce que le serveur finira par voir ne pourra pas être distingué de quelqu'un qui définit réellement la valeur de <input type="file" />
. L'astuce, finalement, est de commencer une nouvelle XMLHttpRequest () avec le serveur ...
function uploadFile (data) {
// define data and connections
var blob = new Blob([JSON.stringify(data)]);
var url = URL.createObjectURL(blob);
var xhr = new XMLHttpRequest();
xhr.open('POST', 'myForm.php', true);
// define new form
var formData = new FormData();
formData.append('someUploadIdentifier', blob, 'someFileName.json');
// action after uploading happens
xhr.onload = function(e) {
console.log("File uploading completed!");
};
// do the uploading
console.log("File uploading started!");
xhr.send(formData);
}
// This data/text below is local to the JS script, so we are allowed to send it!
uploadFile({'hello!':'how are you?'});
Alors, pourquoi pourriez-vous utiliser cela? Je l'utilise pour télécharger des éléments de toile HTML5 au format jpg. Cela évite à l'utilisateur d'avoir à ouvrir un file
input
élément, uniquement pour sélectionner l'image locale en cache qu'il vient de redimensionner, de modifier, etc. Mais cela devrait fonctionner pour tout type de fichier.
1) Le problème de la valeur par défaut dans une entrée de fichier N'EST PAS "fait pour des raisons de sécurité", mais les navigateurs "n'ont tout simplement pas réussi à l'implémenter, sans raison valable": voir ce rapport détaillé
2) Une solution simple peut être d'utiliser une entrée de texte au-dessus de l'entrée de fichier, comme ici . Bien sûr, vous avez besoin de code pour envoyer le fichier, en utilisant maintenant la valeur en entrée de texte et non l'entrée de fichier.
Dans mon cas, en faisant une application HTA, ce n'est pas un problème, je n'utilise pas du tout de formulaire.
Définissez en html:
<input type="hidden" name="image" id="image"/>
En JS:
ajax.jsonRpc("/consulta/dni", 'call', {'document_number': document_number})
.then(function (data) {
if (data.error){
...;
}
else {
$('#image').val(data.image);
}
})
Après:
<input type="hidden" name="image" id="image" value="/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8U..."/>
<button type="submit">Submit</button>
En fait, nous pouvons le faire. nous pouvons définir la valeur par défaut du fichier en utilisant le contrôle webbrowser en c # à l'aide de la bibliothèque FormToMultipartPostData. Nous devons télécharger et inclure cette bibliothèque dans notre projet. Webbrowser permet à l'utilisateur de naviguer dans les pages Web à l'intérieur du formulaire. Une fois la page Web chargée, le script à l'intérieur du webBrowser1_DocumentCompleted sera exécuté. Alors,
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
FormToMultipartPostData postData =
new FormToMultipartPostData(webBrowser1, form);
postData.SetFile("fileField", @"C:\windows\win.ini");
postData.Submit();
}
Reportez-vous au lien ci-dessous pour le téléchargement et la référence complète.
https://www.codeproject.com/Articles/28917/Setting-a-file-to-upload-inside-the-WebBrowser-com