我在我的应用程序中编写了一个AJAX文件上传功能。从我的笔记本电脑上运行它时效果很好。当我使用相同的应用程序尝试完全相同的文件,但部署在jBoss服务器上时,我得到以下异常:
2013-02-18 11:30:02,796 ERROR [STDERR] java.io.FileNotFoundException: C:\Users\MyUser\Desktop\TestFile.pdf (The system cannot find the file specified).
getFileData方法:
private byte[] getFileData(File file) {
FileInputStream fileInputStream = null;
byte[] bytFileData = null;
try {
fileInputStream = new FileInputStream(file);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
if (fileInputStream != null) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] bytBuffer = new byte[1024];
try {
for (int readNum; (readNum = fileInputStream.read(bytBuffer)) != -1;) {
byteArrayOutputStream.write(bytBuffer, 0, readNum);
}
} catch (IOException e) {
e.printStackTrace();
}
bytFileData = byteArrayOutputStream.toByteArray();
}
return bytFileData;
}
获取变量中的文件内容(来自上述方法):
byte[] bytFileData = this.getFileData(file);
制作文件:
private boolean makeFile(File folderToMake, File fileToMake, byte[] bytFileData) {
Boolean booSuccess = false;
FileOutputStream fileOutputStream = null;
try {
if (!folderToMake.exists()) {
folderToMake.mkdirs();
}
if (!fileToMake.exists()) {
if (fileToMake.createNewFile() == true) {
booSuccess = true;
fileOutputStream = new FileOutputStream(fileToMake);
fileOutputStream.write(bytFileData);
fileOutputStream.flush();
fileOutputStream.close();
}
}
} catch (Exception e) {
e.printStackTrace();
booSuccess = false;
}
return booSuccess;
}
有什么想法吗?
谢谢
查尔斯
答案 0 :(得分:2)
您似乎只是将文件路径作为请求的一部分传递给服务器,而不是实际上传文件,然后尝试使用该文件路径来访问该文件。
这将适用于您的笔记本电脑,因为代码在本地运行时可以访问您的文件系统,并且能够找到该文件。它不能在服务器上部署,因为它是一个完全独立的机器,因此无法访问您的文件系统。
您需要修改客户端(AJAX)代码才能实际上传文件,然后修改服务器端代码以使用上传的文件。请注意,通常不可能上传AJAX文件 - 有一些框架(如jQuery)可以使用变通方法提供此功能。
我不是100%,但我认为可以使用HTML5功能上传正确的AJAX文件,但浏览器对此的支持可能会非常差。