Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在哪里配置使用GWT Uploader上载文件的路径?_Java_Gwt_File Upload - Fatal编程技术网

Java 在哪里配置使用GWT Uploader上载文件的路径?

Java 在哪里配置使用GWT Uploader上载文件的路径?,java,gwt,file-upload,Java,Gwt,File Upload,我正在使用此库:,在我的Web应用程序中上载文件。我按照这里解释的步骤进行了操作:,并使用了showcase中的第一个示例:,我使用servlet的信息修改了方法Upload.setUploadURL()中的参数,似乎一切正常。服务器日志甚至说该文件已成功上载。我的问题是我找不到它(文件)。我应该在哪里查找它,或者在哪里设置文件上传的路径 以下是客户端代码: import org.apache.commons.fileupload.FileItem; import org.apache.comm

我正在使用此库:,在我的Web应用程序中上载文件。我按照这里解释的步骤进行了操作:,并使用了showcase中的第一个示例:,我使用servlet的信息修改了方法
Upload.setUploadURL()
中的参数,似乎一切正常。服务器日志甚至说该文件已成功上载。我的问题是我找不到它(文件)。我应该在哪里查找它,或者在哪里设置文件上传的路径

以下是客户端代码:

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class FileUploadServlet extends HttpServlet {

  private long FILE_SIZE_LIMIT = 20 * 1024 * 1024; // 20 MiB
  private final Logger logger = Logger.getLogger("UploadServlet");

  protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws ServletException, IOException {

    try {
      DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
      ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory);
      fileUpload.setSizeMax(FILE_SIZE_LIMIT);

      List<FileItem> items = fileUpload.parseRequest(req);

      for (FileItem item : items) {
        if (item.isFormField()) {
          logger.log(Level.INFO, "Received form field:");
          logger.log(Level.INFO, "Name: " + item.getFieldName());
          logger.log(Level.INFO, "Value: " + item.getString());
        } else {
          logger.log(Level.INFO, "Received file:");
          logger.log(Level.INFO, "Name: " + item.getName());
          logger.log(Level.INFO, "Size: " + item.getSize());
        }

        if (!item.isFormField()) {
          if (item.getSize() > FILE_SIZE_LIMIT) {
            resp.sendError(HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE,
              "File size exceeds limit");

            return;
          }

          // Typically here you would process the file in some way:
          // InputStream in = item.getInputStream();
          // ...

          if (!item.isInMemory())
            item.delete();
        }
      }
    } catch (Exception e) {
      logger.log(Level.SEVERE, "Throwing servlet exception for unhandled exception", e);
      throw new ServletException(e);
    }
  }

}  
包org.moxieapps.gwt.uploader.showcase.client

import com.google.gwt.core.client.EntryPoint;  
import com.google.gwt.i18n.client.NumberFormat;  
import com.google.gwt.user.client.Window;  
import com.google.gwt.user.client.ui.HorizontalPanel;  
import com.google.gwt.user.client.ui.Label;  
import com.google.gwt.user.client.ui.RootPanel;  
import com.google.gwt.user.client.ui.VerticalPanel;  
import org.moxieapps.gwt.uploader.client.Uploader;  
import org.moxieapps.gwt.uploader.client.events.*;  

/** 
 * Simple Text Link and Progress text label example of GWT Uploader 
 */  
public class TextButtonAndProgressText implements EntryPoint {  

    private Label progressLabel;  
    private Uploader uploader;  

    public void onModuleLoad() {  
        progressLabel = new Label();  
        progressLabel.setStyleName("progressLabel");  

        uploader = new Uploader();  
        uploader.setUploadURL("/DevNullUploadServlet")  
            .setButtonText("<span class=\"buttonText\">Click to Upload</span>")  
            .setButtonTextStyle(".buttonText {font-family: Arial, sans-serif; font-size: 14px; color: #BB4B44}")  
            .setFileSizeLimit("50 MB")  
            .setButtonWidth(150)  
            .setButtonHeight(22)  
            .setButtonCursor(Uploader.Cursor.HAND)  
            .setButtonAction(Uploader.ButtonAction.SELECT_FILE)  
            .setUploadProgressHandler(new UploadProgressHandler() {  
                public boolean onUploadProgress(UploadProgressEvent uploadProgressEvent) {  
                    progressLabel.setText(NumberFormat.getPercentFormat().format(  
                        (double)uploadProgressEvent.getBytesComplete() / (double)uploadProgressEvent.getBytesTotal()  
                    ));  
                    return true;  
                }  
            })  
            .setUploadSuccessHandler(new UploadSuccessHandler() {  
                public boolean onUploadSuccess(UploadSuccessEvent uploadSuccessEvent) {  
                    resetText();  
                    StringBuilder sb = new StringBuilder();  
                    sb.append("File ").append(uploadSuccessEvent.getFile().getName())  
                        .append(" (")  
                        .append(NumberFormat.getDecimalFormat().format(uploadSuccessEvent.getFile().getSize() / 1024))  
                        .append(" KB)")  
                        .append(" uploaded successfully at ")  
                        .append(NumberFormat.getDecimalFormat().format(  
                            uploadSuccessEvent.getFile().getAverageSpeed() / 1024  
                        ))  
                        .append(" Kb/second");  
                    progressLabel.setText(sb.toString());  
                    return true;  
                }  
            })  
            .setFileDialogCompleteHandler(new FileDialogCompleteHandler() {  
                public boolean onFileDialogComplete(FileDialogCompleteEvent fileDialogCompleteEvent) {  
                    if (fileDialogCompleteEvent.getTotalFilesInQueue() > 0 && uploader.getStats().getUploadsInProgress() <= 0) {  
                        progressLabel.setText("0%");  
                        uploader.setButtonText("<span class=\"buttonText\">Uploading...</span>");  
                        uploader.startUpload();  
                    }  
                    return true;  
                }  
            })  
            .setFileQueueErrorHandler(new FileQueueErrorHandler() {  
                public boolean onFileQueueError(FileQueueErrorEvent fileQueueErrorEvent) {  
                    resetText();  
                    Window.alert("Upload of file " + fileQueueErrorEvent.getFile().getName() + " failed due to [" +  
                        fileQueueErrorEvent.getErrorCode().toString() + "]: " + fileQueueErrorEvent.getMessage()  
                    );  
                    return true;  
                }  
            })  
            .setUploadErrorHandler(new UploadErrorHandler() {  
                public boolean onUploadError(UploadErrorEvent uploadErrorEvent) {  
                    resetText();  
                    Window.alert("Upload of file " + uploadErrorEvent.getFile().getName() + " failed due to [" +  
                        uploadErrorEvent.getErrorCode().toString() + "]: " + uploadErrorEvent.getMessage()  
                    );  
                    return true;  
                }  
            });  

        VerticalPanel verticalPanel = new VerticalPanel();  
        verticalPanel.add(uploader);  
        verticalPanel.add(progressLabel);  
        verticalPanel.setCellHorizontalAlignment(uploader, HorizontalPanel.ALIGN_LEFT);  
        verticalPanel.setCellHorizontalAlignment(progressLabel, HorizontalPanel.ALIGN_LEFT);  

        //noinspection GwtToHtmlReferences  
        RootPanel.get("TextButtonAndProgressText").add(verticalPanel);  
    }  

    private void resetText() {  
        progressLabel.setText("");  
        uploader.setButtonText("<span class=\"buttonText\">Click to Upload</span>");  
    }  
}  
import com.google.gwt.core.client.EntryPoint;
导入com.google.gwt.i18n.client.NumberFormat;
导入com.google.gwt.user.client.Window;
导入com.google.gwt.user.client.ui.HorizontalPanel;
导入com.google.gwt.user.client.ui.Label;
导入com.google.gwt.user.client.ui.RootPanel;
导入com.google.gwt.user.client.ui.VerticalPanel;
导入org.moxieapps.gwt.uploader.client.uploader;
导入org.moxieapps.gwt.uploader.client.events.*;
/** 
*GWT Uploader的简单文本链接和进度文本标签示例
*/  
公共类TextButtonAndProgressText实现入口点{
自有品牌;
私人上传器上传器;
moduleLoad()上的公共void{
progressLabel=新标签();
progressLabel.setStyleName(“progressLabel”);
uploader=新的uploader();
uploader.setUploadURL(“/DevNullUploadServlet”)
.setButtonText(“单击以上载”)
.setButtonTextStyle(“.buttonText{字体系列:Arial,无衬线;字体大小:14px;颜色:#BB4B44}”)
.setFileSizeLimit(“50 MB”)
.setButtonWidth(150)
.设置按钮高度(22)
.setButtonCursor(Uploader.Cursor.HAND)
.setButtonAction(Uploader.ButtonAction.SELECT_文件)
.setUploadProgressHandler(新的UploadProgressHandler(){
公共布尔onUploadProgress(UploadProgressEvent UploadProgressEvent){
progressLabel.setText(NumberFormat.getPercentFormat().format(
(double)uploadProgressEvent.getBytesComplete()/(double)uploadProgressEvent.GetByTestTotal()
));  
返回true;
}  
})  
.setUploadSuccessHandler(新的UploadSuccessHandler(){
公共布尔onUploadSuccess(UploadSuccessEvent UploadSuccessEvent){
重置文本();
StringBuilder sb=新的StringBuilder();
sb.append(“文件”).append(uploadSuccessEvent.getFile().getName())
.附加(“”)
.append(NumberFormat.getDecimalFormat().format(uploadSuccessEvent.getFile().getSize()/1024))
.append(“KB”)
.append(“在上成功上载”)
.append(NumberFormat.getDecimalFormat()。格式(
uploadSuccessEvent.getFile().getAverageSpeed()/1024
))  
.附加(“Kb/秒”);
progressLabel.setText(sb.toString());
返回true;
}  
})  
.setFileDialogCompleteHandler(新的FileDialogCompleteHandler(){
公共布尔onFileDialogComplete(FileDialogCompleteEvent FileDialogCompleteEvent){
如果(fileDialogCompleteEvent.getTotalFilesInQueue()>0&&uploader.getStats().getUploadsInProgress()文件大小限制){
响应发送错误(HttpServletResponse.SC\u请求\u实体\u太大,
“文件大小超出限制”);
返回;
}
//通常在这里,您会以某种方式处理文件:
//InputStream in=item.getInputStream();
// ...
如果(!item.isInMemory())
项目.删除();
}
}
}捕获(例外e){
logger.log(Level.severy,“为未处理的异常引发servlet异常”,e);
抛出新的ServletException(e);
}
}
}  

尽管日志显示文件已成功上载,但您从未真正将文件保存到本地磁盘

  for (FileItem item : items) {
    if (item.isFormField()) {
      logger.log(Level.INFO, "Received form field:");
      logger.log(Level.INFO, "Name: " + item.getFieldName());
      logger.log(Level.INFO, "Value: " + item.getString());
    } else {
      logger.log(Level.INFO, "Received file:");
      logger.log(Level.INFO, "Name: " + item.getName());
      logger.log(Level.INFO, "Size: " + item.getSize());
    }
上面是相关代码,显示记录器能够找到文件项并记录其详细信息

几行之后,有以下评论:

      // Typically here you would process the file in some way:
      // InputStream in = item.getInputStream();
      // ...
这就是我猜想教程让您决定如何将文件写入磁盘的地方。使用InputStream将文件写入磁盘应该没有问题。上载部分似乎工作正常,您只需要将上载的文件写入磁盘

编辑: 您正在使用的Apache FileUpload库似乎有一些尝试将文件写入磁盘的简单方法。用以下行替换注释应该可以:

File newFile= new File("C:/path/to/directory");
item.write(newFile);

是的,这正是我所缺少的。虽然我使用了
File newFile=newFile(“C:/path/to/directory”,“fileName”);
,但它的效果非常好。