2009-07-30 6 views
11

que je fais phot en Asp.net et je donne le code suivant sous mes contrôles:La méthode SaveAs est configuré pour exiger un chemin enraciné, et le chemin « fp » est pas enracinée

string st; 
    st = tt.PostedFile.FileName; 
    Int32 a; 
    a = st.LastIndexOf("\\"); 
    string fn; 
    fn = st.Substring(a + 1); 
    string fp; 
    fp = Server.MapPath(" "); 
    fp = fp + "\\"; 
    fp = fp + fn; 
    tt.PostedFile.SaveAs("fp"); 

Mais lors du téléchargement ou de l'enregistrement de l'image, le message d'erreur vient que la méthode SaveAs est configurée pour requérir un chemin d'accès racine, et le chemin 'fp' n'est pas rooté. Alors S'il vous plaît aidez-moi quel est le problème

+0

Sur intérêt, pourquoi avoir vous avez divisé le code qui pourrait facilement être exprimé en 5 lignes en 11? Pourquoi déclarer une variable et ne l'affecter qu'à la ligne suivante? –

+1

Jetez également un coup d'oeil à System.IO.Path pour les manipulations de noms de fichiers. –

Répondre

25

Je suppose que le problème est que vous utilisez la chaîne "fp" au lieu de la variable fp. Voici le code fixe, a également fait (OMI) plus lisible:

string filename = tt.PostedFile.FileName; 
int lastSlash = filename.LastIndexOf("\\"); 
string trailingPath = filename.Substring(lastSlash + 1); 
string fullPath = Server.MapPath(" ") + "\\" + trailingPath; 
tt.PostedFile.SaveAs(fullPath); 

Vous devriez également envisager de modifier l'avant-dernière ligne:

string fullPath = Path.Combine(Server.MapPath(" "), trailingPath); 

Vous pouvez également envisager ce qui se passerait si le fichier affiché utilisé/au lieu de \ dans le nom de fichier ... comme s'il était publié à partir de Linux. En fait, vous pouvez changer l'ensemble des trois premières lignes:

string trailingPath = Path.GetFileName(tt.PostedFile.FileName)); 

La combinaison de ceux-ci, nous obtiendrions:

string trailingPath = Path.GetFileName(tt.PostedFile.FileName)); 
string fullPath = Path.Combine(Server.MapPath(" "), trailingPath); 
tt.PostedFile.SaveAs(fullPath); 

beaucoup plus propre, l'OMI :)

+0

Merci monsieur maintenant aucune erreur n'est là mais quand je débogue les images ne sont pas montrées dans Gridview. –

+0

Sans savoir ce que vous faites, il est difficile de vous aider. Je vous suggère de poser une autre question avec plus d'informations. –

+0

Monsieur J'ai eu gridview en vue de conception et en ce que j'ai 2 coloum Nom, classe, image. Donc pour l'image j'ai fileuploader dans Edititemtemplate aussi bien dans fottertemplate. Mais monsieur quand je télécharge une image il n'y a pas d'erreur mais les images ne sont pas affichées, même problème lors de la mise à jour. Je donne dans la source de l'image (itemtemplate) ce code -

2

Si vous souhaitez enregistrer le fichier téléchargé, il suffit de passer la valeur de fp dans, ne le mettez pas entre guillemets:

tt.PostedFile.SaveAs(fp); 
2

Lors de la lecture du titre de la question, je pensais qu'il semblait que vous ayez mis des guillemets autour du nom de la variable. Pas vraiment croire qu'il en était ainsi, j'ai ouvert la question pour le lire, mais c'était vraiment ainsi ...

1

J'ai rencontré le même problème. Le problème est que vous n'avez pas spécifié le chemin du serveur sur lequel vous voulez enregistrer le fichier. Et voici une réponse probablement plus simple:

string fileName = tt.PostedFile.FileName; 
string savePath = Server.MapPath("Path/Of/The/Folder/Comes/Here/") + fileName); 
tt.PostedFile.SaveAs(savePath); 

C'est tout! Bonne chance codeur!

1

Nous ne pouvons pas utiliser la méthode "SaveAs" pour écrire directement sur un serveur FTP. Seuls les chemins locaux et les chemins UNC sont pris en charge pour la méthode ci-dessus.

Pour l'enregistrer au format FTP, veuillez utiliser la classe FtpWebRequest.

Vous obtiendrez tous les détails à ce sujet dans le même type de question réponse dans social.msdn.

S'il vous plaît passer par le lien .. et vous serez en mesure de résoudre le problème ..

enter link description here

--thanks pour la réponse par Jesse HouwingXPirit (MCC, associé, MVP)

0

Utilisez Server.MapPath():

fileUploader.SaveAs(Server.MapPath("~/Images/")+"file.jpg"); 
Questions connexes