使用jspSmartUpload.jar上传图片的路径问题

默认居然上传到的是这个路径D:\EclipseWorkspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\
这是Eclipse决定吗? 用什么方法能上传到真实的路径而不是这个路径呢?file.saveAs(url,su.SAVE_VIRTUAL);

比如你想把图片放在服务器(比如你的tomcat)的Web应用的某目录下,
[code="java"]saveAs("/file/myfile.jpg",File.SAVEAS_VIRTUAL)[/code]
上面这句代码是把myfile.jpg放在你的webapps//file/目录下,这里有个前提是这个目录必须存在(即file目录需要创建)。

这样说懂了吧。

你得到文件流,代码控制把文件流写到哪个目录文件中,
不要依赖它的默认目录嘛

看看下面怎么解释saveAs第二个参数;例子讲的很清楚。

注意有红色和蓝色的语句,现在你的情况就是红色语句的情况,蓝色语句解释了为什么。

Files类中的saveAs()方法用于保存文件,在File类中提供了两种形式的saveAs()方法:

[code="java"] saveAs(String destFilePathName)方法。

 saveAs(String destFilePathName, int optionSaveAs)方法。[/code]

这两个方法没有返回值,第一种形式与saveAs(destFilePathName, 0)执行效果相同。
[size=large]
参数说明[/size]

l destFilePathName:指定文件保存的路径,包括文件名。其值应以“/”开头。

l optionSaveAs:保存目标选项。该选项有3个值,分别是SAVEAS_AUTO、SAVEAS_ VIRTUAL和SAVEAS_PHYSICAL。它们是File类中的静态字段,分别表示整数0、1和2。将optionSaveAs参数设为SAVEAS_VIRTUAL选项值,则通知jspSmartUpload组件以Web应用的根目录为文件根目录,然后加上destFilePathName参数指定的路径来保存文件;[color=red]设为SAVEAS_PHYSICAL值,则一种情况是通知jspSmartUpload组件将以Web服务器的安装路径中的磁盘根目录为文件根目录,然后加上destFilePathName参数指定的路径来保存文件,[/color]另一种情况则以destFilePathName参数指定的目录为最终目录来保存文件;[color=blue]设为SAVEAS_AUTO值,则首先以SAVEAS_VIRTUAL方式来保存文件,若Web应用下由destFilePathName参数指定的路径不存在,则以SAVEAS_PHYSICAL方式保存文件。[/color]
例如,若Web服务器(以Tomcat为例)的安装目录为“E:\Tomcat 5.5”,当前Web应用为“FileUpDown”,下面分别应用这3个选项保存文件。

(1)使用SAVEAS_VIRTUAL选项值。

saveAs("/file/myfile.txt",File.SAVEAS_VIRTUAL)或saveAs("/file/myfile.txt",1)

若FileUpDown应用下存在“file”子目录,则将上传的文件以“myfile.txt”为文件名进行保存,实际的保存路径如下:

E:\Tomcat 5.5\webapps\FileUpDown\file\myfile.txt

若不存在“file”子目录,则抛出下面的异常:

This path does not exist (1135)

(2)使用SAVEAS_PHYSICAL选项值。

[code="java"]saveAs("/file/myfile.txt",File.SAVEAS_PHYSICAL)或saveAs("/file/myfile.txt",2)[/code]
因为Tomcat 5.5安装在E盘,因此若E盘根目录下存在“file”子目录,则将上传的文件以“myfile.txt”为文件名进行保存,实际的保存路径如下:

E:\file\myfile.txt

若E盘根目录下不存在“file”子目录,而FileUpDown应用的根目录下存在“file”子目录,则抛出下面的异常:

The path is not a physical path

否则抛出下面的异常:

This path does not exist (1135)

使用SAVEAS_PHYSICAL选项值时,可以将上传的文件保存到由destFilePathName参数指定的一个具体的目录下,例如:

saveAs("D:/temp/myfile.txt",File.SAVEAS_PHYSICAL)

最终文件的实际保存路径如下:

D:\temp\myfile.txt

(3)使用SAVEAS_AUTO选项值。

saveAs("/file/myfile.txt",File.SAVEAS_AUTO)或saveAs("/file/myfile.txt",0)

若FileUpDown应用根目录下存在“file”子目录,则以SAVEAS_VIRTUAL方式保存文件,否则以SAVEAS_PHYSICAL方式保存文件。

通常情况下应使用SAVEAS_VIRTUAL方式保存文件,以便程序的移植。