[英]How to upload a file using af:inputFile in Oracle ADF
Can anyone please tell me how to upload file to server using af:inputFile in Oracel ADF. 谁能告诉我如何使用Oracel ADF中的af:inputFile将文件上传到服务器。 I searched about this and found we can use the following
我对此进行了搜索,发现我们可以使用以下内容
<af:form usesUpload="true">
<af:inputFile columns="10"
valueChangeListener="#{backing.fileUploaded}"/>
</af:form>
using the above code I can set a method that executes when some choose some file in the form. 使用上面的代码,我可以设置一个当某些人选择表单中的某些文件时执行的方法。 So now I need to know in fileUploaded method what should be the java code to upload the given file to the server.
因此,现在我需要在fileUploaded方法中知道将给定文件上传到服务器的Java代码应该是什么。
Please help me. 请帮我。 How I can achieve this.
我如何实现这一目标。
Thanks in advance. 提前致谢。
As you have already created value change listener in managed bean then use this code - 由于您已经在托管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();
}
}
and this is the method to upload file on server (You have to provide absolute path) 这是在服务器上上传文件的方法(您必须提供绝对路径)
/**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;
}
Check this thread on OTN Forum https://community.oracle.com/message/13135474#13135474 在OTN论坛上检查此线程https://community.oracle.com/message/13135474#13135474
Here you can read full implementation and download sample application to test http://www.awasthiashish.com/2014/08/uploading-and-downloading-files-from.html 在这里,您可以阅读完整的实现并下载示例应用程序以测试http://www.awasthiashish.com/2014/08/uploading-and-downloading-files-from.html
Full disclosure on the last link above and its contents: I wrote it and it is my TLD. 上面最后一个链接及其内容的完整披露:我写的是我的TLD。
Your inputFile should look something like the following where gciuiCheckin is a reference to the backing bean. 您的inputFile应该类似于以下内容,其中gciuiCheckin是对后备bean的引用。 In this case the inputFile control is in a jsff contained as a region inside a jspx with usesUpload="true", but this would be similar if you are putting your controls directly in the jspx, the main thing is you need to bind the control value to a backing bean variable of type UploadedFile:
在这种情况下,inputFile控件位于jsff中,作为jspx内的一个区域,使用usesUpload =“ true”,但是如果您将控件直接放在jspx中,则情况将类似,主要是您需要绑定控件值,类型为UploadedFile的后备bean变量:
<af:inputFile label=" " id="ifDoc" columns="50"
value="#{pageFlowScope.gciuiCheckin.filesToUpload}"
maximumFiles="#{pageFlowScope.gciuiCheckin.maxFilesCanBeUploaded}"
autoHeightRows="0" rows="5" uploadType="auto"/>
Then you also should have a commandButton to call a bean method once user has selected the file (each file typically is uploaded to server as the user selects or drag drops each one): 然后,一旦用户选择了文件,您还应该有一个commandButton来调用bean方法(通常,当用户选择或拖放每个文件时,每个文件通常都会上传到服务器):
<af:commandButton text="Commit File(s)" id="cbUpload"
partialSubmit="true" action="#{pageFlowScope.gciuiCheckin.saveUploadedFilesAction}"/>
You will need this import in the backing bean: 您将在支持bean中需要此导入:
import org.apache.myfaces.trinidad.model.UploadedFile;
In the backing bean, create a List with accessors to hold the uploaded files: 在支持bean中,创建一个带有访问器的列表,以保存上载的文件:
private List<UploadedFile> filesToUpload;
In the method called by the commandButton, you will do something like: 在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...
}
...
Hope this helps. 希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.