J'ai une page de téléchargement de fichier avec un contrôle AsyncFileUpload. Lorsque l'utilisateur parcourt le fichier, le contrôle de téléchargement extrait le fichier en mémoire. J'ai alors un bouton Télécharger qui tire le code suivant pour enregistrer le fichier dans une base de données.Ajax AsyncFileUpload.FileBytes renvoie null
Je constate que si les fichiers dépassent environ 500 Ko, la propriété FileBytes du contrôle renvoie simplement null. Cela se passe sur mon serveur, mais lors de l'exécution de l'application localement, il fonctionne très bien.
Je ne gère pas l'événement OnUploadCompleted car j'ai besoin de l'utilisateur pour compléter d'autres informations avant de valider le fichier dans la base de données.
J'ai dans mon web.config: httpRuntime maxRequestLength = « 10000 » />
private void UploadDocument(int mietID)
{
if (Page.IsValid)
{
if (mietID > 0)
{
if (File1.HasFile && File1.FileBytes != null)
{
string[] docFormats = MIETPConfig.Current.SupportedDocumentFormats;
for (short i = 0; i < docFormats.Length; i++)
docFormats[i] = docFormats[i].ToUpper();
if (docFormats.Contains(Path.GetExtension(File1.FileName).ToUpper()))
{
try
{
byte[] uploadedBytes = File1.FileBytes;
DocumentController.CreateDocument(txtLinkText.Text, Path.GetFileName(File1.PostedFile.FileName), uploadedBytes, mietID, (User)Session["User"]);
MietpClientScripts.CloseWindow(Page);
}
catch (Exception)
{
lblUploadStatus.Text = "There was an error saving the document to the database.";
}
}
else
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (string s in docFormats)
sb.Append(s + ", ");
sb.Remove(sb.Length - 2, 2);
lblUploadStatus.Text = "Invalid file format, only these formats are supported: " + sb.ToString();
}
}
else
{
lblUploadStatus.Text = "There was an error saving the document, the document could not be read; it might be too large to upload.";
}
}
else
lblUploadStatus.Text = "No Mietp ID to associate document with.";
}
}
Désolé, j'ai manqué cela de la poste - j'avais le maxRequestLength fixé à 10000, mais l'ai essayé avec 102400 maintenant. J'ai essayé d'utiliser le flux de FileContent mais la méthode read ne renvoie rien, bien que la propriété Length donne le nombre d'octets correct. File.SaveAs donne une ObjectDisposedException (impossible d'accéder à un fichier fermé) chaque fois que les FileBytes sont NULL. –
Si vous venez de mettre: 'void UploadDocument() {File1.SaveAs (Server.MapPath (" ~/myuploadedfile.tmp ")); } ', au lieu de toute la logique maintenant; cela enregistre-t-il le fichier correctement? Sinon, cela fonctionne-t-il lorsque vous utilisez un 'FileUpload' normal au lieu de celui d'AJAX? –
Non, le fichier ne sera pas sauvegardé même si j'ai supprimé la logique. J'ai fait un remplacement direct à un contrôle FileUpload et cela fonctionne très bien avec tous les documents, même un 15 Mo. –