如何在 Oracle ADF 中使用 af:inputFile 上传文件
How to upload a file using af:inputFile in Oracle ADF
谁能告诉我如何在 Oracel ADF 中使用 af:inputFile 将文件上传到服务器。我对此进行了搜索,发现我们可以使用以下
<af:form usesUpload="true">
<af:inputFile columns="10"
valueChangeListener="#{backing.fileUploaded}"/>
</af:form>
使用上面的代码我可以设置一个方法,当一些人在表单中选择一些文件时执行。所以现在我需要在 fileUploaded 方法中知道将给定文件上传到服务器的 java 代码应该是什么。
请帮帮我。我怎样才能做到这一点。
提前致谢。
您的 inputFile 应如下所示,其中 gciuiCheckin 是对支持 bean 的引用。在这种情况下,inputFile 控件位于一个 jsff 中,该 jsff 包含在 usesUpload="true" 的 jspx 中,但是如果您将控件直接放在 jspx 中,这将是类似的,主要是您需要绑定UploadedFile 类型的支持 bean 变量的控制值:
<af:inputFile label=" " id="ifDoc" columns="50"
value="#{pageFlowScope.gciuiCheckin.filesToUpload}"
maximumFiles="#{pageFlowScope.gciuiCheckin.maxFilesCanBeUploaded}"
autoHeightRows="0" rows="5" uploadType="auto"/>
然后你还应该有一个命令按钮,一旦用户选择了文件就调用 bean 方法(每个文件通常在用户选择或拖放每个文件时上传到服务器):
<af:commandButton text="Commit File(s)" id="cbUpload"
partialSubmit="true" action="#{pageFlowScope.gciuiCheckin.saveUploadedFilesAction}"/>
您将需要在支持 bean 中进行此导入:
import org.apache.myfaces.trinidad.model.UploadedFile;
在支持 bean 中,创建一个带有访问器的列表来保存上传的文件:
private List<UploadedFile> filesToUpload;
在 commandButton 调用的方法中,您将执行如下操作:
public String saveUploadedFilesAction() {
List<UploadedFile> files = this.getFilesToUpload();
if (files == null || files.size() == 0) {
displayMessageToUser(FacesMessage.SEVERITY_WARN, checkinErrorMessage);
return null;
}
//iterate each file and check size, extension, etc...
for (int i = 0; i < files.size(); i++) {
UploadedFile currFile = files.get(i);
//now do something with the file...
}
...
希望这对您有所帮助。
因为您已经在托管 bean 中创建了值更改侦听器,所以请使用此代码 -
/**Method to Upload File ,called on ValueChangeEvent of inputFile
* @param vce
*/
public void uploadFileVCE(ValueChangeEvent vce) {
if (vce.getNewValue() != null) {
//Get File Object from VC Event
UploadedFile fileVal = (UploadedFile) vce.getNewValue();
}
}
这是上传文件到服务器的方法(必须提供绝对路径)
/**Method to upload file to actual path on Server*/
private String uploadFile(UploadedFile file) {
UploadedFile myfile = file;
String path = null;
if (myfile == null) {
} else {
// All uploaded files will be stored in below path
path = "D://FileStore//" + myfile.getFilename();
InputStream inputStream = null;
try {
FileOutputStream out = new FileOutputStream(path);
inputStream = myfile.getInputStream();
byte[] buffer = new byte[8192];
int bytesRead = 0;
while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
out.write(buffer, 0, bytesRead);
}
out.flush();
out.close();
} catch (Exception ex) {
// handle exception
ex.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
}
}
}
//Returns the path where file is stored
return path;
}
在 OTN 论坛上查看此帖子
https://community.oracle.com/message/13135474#13135474
在这里您可以阅读完整的实现并下载示例应用程序进行测试
http://www.awasthiashish.com/2014/08/uploading-and-downloading-files-from.html
上面最后 link 的完整披露及其内容:我写的,这是我的 TLD。
谁能告诉我如何在 Oracel ADF 中使用 af:inputFile 将文件上传到服务器。我对此进行了搜索,发现我们可以使用以下
<af:form usesUpload="true">
<af:inputFile columns="10"
valueChangeListener="#{backing.fileUploaded}"/>
</af:form>
使用上面的代码我可以设置一个方法,当一些人在表单中选择一些文件时执行。所以现在我需要在 fileUploaded 方法中知道将给定文件上传到服务器的 java 代码应该是什么。
请帮帮我。我怎样才能做到这一点。
提前致谢。
您的 inputFile 应如下所示,其中 gciuiCheckin 是对支持 bean 的引用。在这种情况下,inputFile 控件位于一个 jsff 中,该 jsff 包含在 usesUpload="true" 的 jspx 中,但是如果您将控件直接放在 jspx 中,这将是类似的,主要是您需要绑定UploadedFile 类型的支持 bean 变量的控制值:
<af:inputFile label=" " id="ifDoc" columns="50"
value="#{pageFlowScope.gciuiCheckin.filesToUpload}"
maximumFiles="#{pageFlowScope.gciuiCheckin.maxFilesCanBeUploaded}"
autoHeightRows="0" rows="5" uploadType="auto"/>
然后你还应该有一个命令按钮,一旦用户选择了文件就调用 bean 方法(每个文件通常在用户选择或拖放每个文件时上传到服务器):
<af:commandButton text="Commit File(s)" id="cbUpload"
partialSubmit="true" action="#{pageFlowScope.gciuiCheckin.saveUploadedFilesAction}"/>
您将需要在支持 bean 中进行此导入:
import org.apache.myfaces.trinidad.model.UploadedFile;
在支持 bean 中,创建一个带有访问器的列表来保存上传的文件:
private List<UploadedFile> filesToUpload;
在 commandButton 调用的方法中,您将执行如下操作:
public String saveUploadedFilesAction() {
List<UploadedFile> files = this.getFilesToUpload();
if (files == null || files.size() == 0) {
displayMessageToUser(FacesMessage.SEVERITY_WARN, checkinErrorMessage);
return null;
}
//iterate each file and check size, extension, etc...
for (int i = 0; i < files.size(); i++) {
UploadedFile currFile = files.get(i);
//now do something with the file...
}
...
希望这对您有所帮助。
因为您已经在托管 bean 中创建了值更改侦听器,所以请使用此代码 -
/**Method to Upload File ,called on ValueChangeEvent of inputFile
* @param vce
*/
public void uploadFileVCE(ValueChangeEvent vce) {
if (vce.getNewValue() != null) {
//Get File Object from VC Event
UploadedFile fileVal = (UploadedFile) vce.getNewValue();
}
}
这是上传文件到服务器的方法(必须提供绝对路径)
/**Method to upload file to actual path on Server*/
private String uploadFile(UploadedFile file) {
UploadedFile myfile = file;
String path = null;
if (myfile == null) {
} else {
// All uploaded files will be stored in below path
path = "D://FileStore//" + myfile.getFilename();
InputStream inputStream = null;
try {
FileOutputStream out = new FileOutputStream(path);
inputStream = myfile.getInputStream();
byte[] buffer = new byte[8192];
int bytesRead = 0;
while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
out.write(buffer, 0, bytesRead);
}
out.flush();
out.close();
} catch (Exception ex) {
// handle exception
ex.printStackTrace();
} finally {
try {
inputStream.close();
} catch (IOException e) {
}
}
}
//Returns the path where file is stored
return path;
}
在 OTN 论坛上查看此帖子 https://community.oracle.com/message/13135474#13135474
在这里您可以阅读完整的实现并下载示例应用程序进行测试 http://www.awasthiashish.com/2014/08/uploading-and-downloading-files-from.html
上面最后 link 的完整披露及其内容:我写的,这是我的 TLD。