ServletActionContext就能获得class所在路径,通过然后获取再获取父目录不就是你要的目录了吗,在web项目中获取目录只能从servletActionContext入手。或者使用request。requestgetServletContext()getRealPath("")
你具体指的是JSP吧,其实关于另存对话框显示是浏览器自行决定的,即:一个url的跳转如果浏览器检测到这个url指向的是一个文件流那么就会显出另存为的对话框。具体的方式时前台一个 超链接<a href="url">,url指向后台的servlet(struts对应action,等其他的业务逻辑)。而后台的实现方式:把文件流输出到reponse的输出流中。具体代码为:
public static void downloadFile(>
mappath :存在web服务器上的指定虚拟路径相对应的物理文件路径(即你存放在网站中的文件夹的路径)
filename :前台一个控件,type="file",name="filename",此控件可进行选择并获取其路径(这里的路径是原来的路径,如:D:\\某文件夹,所以这里把此路径改为mappath,方便读取)
整句话:就是把原来的路径改为网站中的文件夹的路径,然后可存放到数据库,进行读取
下面给你提供一个实现,该实现采用了代理模式。这个实现包含两个文件,分别是Clientjava和ImageIcoProxyjava,ImageIcoProxyjava负责了的延迟加载,你可以修改为不延迟即可。
Clientjava的代码为:
import javaawtGraphics;
import javaawtInsets;
import javaxswingIcon;
import javaxswingJFrame;
public class Client extends JFrame {
private static int IMG_WIDTH = 510;
private static int IMG_HEIGHT = 317;
private Icon imgProxy = null;
public static void main(String[] args) {
Client app = new Client();
appsetVisible(true);
}
public Client() {
super("Virture Proxy Client");
imgProxy = new ImageIcoProxy("D:/testjpg", IMG_WIDTH, IMG_HEIGHT);
thissetBounds(100, 100, IMG_WIDTH + 10, IMG_HEIGHT + 30);
thissetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
}
public void paint(Graphics g) {
superpaint(g);
Insets insets = getInsets();
imgProxypaintIcon(this, g, insetsleft, insetstop);
}
}
ImageIcoProxyjava的代码为:
import javaawtComponent;
import javaawtGraphics;
import javaxswingIcon;
import javaxswingImageIcon;
import javaxswingSwingUtilities;
public class ImageIcoProxy implements Icon {
private ImageIcon realIcon = null;
private String imgName;
private int width;
private int height;
boolean isIconCreated = false;
public ImageIcoProxy(String imgName, int width, int height) {
thisimgName = imgName;
thiswidth = width;
thisheight = height;
}
public int getIconHeight() {
return realIcongetIconHeight();
}
public int getIconWidth() {
return realIcongetIconWidth();
}
public void paintIcon(final Component c, Graphics g, int x, int y) {
if (isIconCreated) {
//已经加载了,直接显示
realIconpaintIcon(c, g, x, y);
gdrawString("Just Test", x + 20, y + 370);
} else {
gdrawRect(x, y, width-1, height-1);
gdrawString("Loading photo", x+20, y+20);
synchronized(this) {
SwingUtilitiesinvokeLater(new Runnable() {
public void run() {
try {
ThreadcurrentThread()sleep(2000);
realIcon = new ImageIcon(imgName);
isIconCreated = true;
} catch (Exception e) {
eprintStackTrace();
}
crepaint();
}
}
);
}
}
}
}
以img标签来开头,在网页的主体部分(即HTML的<body>部分)找到你想要插入的位置。
在这里写下<img>标签。这是一个空标签,创建的是被引用图像的占位空间。
同时在HTML中,<img> 标签是没有结束标签的。您需要将插入的放在两个尖括号之中。
示例:<img src="文件路径/名称">
出于安全原因, js不能访问客户端资源 所以js写不了客户端文件 使用file类i-n-p-u-t标签可以在浏览器上实现浏览客户端文件系统, 但是只能获取文件名, 路径对于js是不可见的 所以你的方法是实现不了的
实现导出文件的通常做法是在后台生成好文件后, 将url重定向到已生成的文件或使用异步方法返回文件url在前台使用i-f-r-a-m-e打开, 这样就能直接下载 之后根据客户端的设置, 是下载还是直接调用关联程序打开文档 以xls文件为例, 客户端已安装office, 大多数浏览器是会直接代开该文件的, 可以在excel中另存到任意路径 不过这些就不是js所能控制的了
后台代码实现方面, 直接在网站目录下生成文件当然方便, 但是存在安全方面的问题, 因为静态url无法控制访问权限 最好是将文件生成在网站文件系统意外的独立区域存储, 将下载事务包装成动态页面, 读取文件使用b-i-n-a-r-y方式写入r-e-s-p-o-n-s-e(注意根据文件类型正确写入c-o-n-t-e-n-t Type, 这样浏览器才能正确识别为文件下载) 这样做的好处显而易见, 不管是安全方面还是其他逻辑都可自由扩展
尼玛, 好多禁用的词汇, 回答js相关的问题各种河蟹
以上就是关于关于在java的web项目中,FileOutputStream 相对路径的问题全部的内容,包括:关于在java的web项目中,FileOutputStream 相对路径的问题、Java:如何在前台显示"另存为"对话框,然后后台获取用户选择的路径呢、file.saveas server.mappath(filename) 什么意思 ,说的具体一些,谢谢了,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)