struts2中文件上传 不能更换上传的文件

使用strust2上传文件遇到这样的问题:
html部分代码如下:

<body>
    <input type="file" name="file"><br>
    <input type="text" name="author">
    <input type="button" name="submit" value="提交">
    <div id="message"></div>
<script src="jquery-3.1.1.min.js"></script>
<script>
$(function(){
    var formData = new FormData();
    formData.append("author",$("input[name='author']").val());
    formData.append("file",$("input[name='file']")[0].files[0]);
    $("input[name='submit']").click(function(){
        $.ajax({
            url:'uploadfiles',
            type:'post',
            data:formData,
            processData:false,
            contentType:false,
            success:function(data){
                $("#message").html(data);
            }
        })
    })
});
</script>
</body>

后台java代码:

public class UploadAction extends ActionSupport{
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public File getFile() {
        return file;
    }
    public void setFile(File file) {
        this.file = file;
    }
    public String getFileContentType() {
        return fileContentType;
    }
    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }
    public String getFileFileName() {
        return fileFileName;
    }
    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }
    private static final long serialVersionUID = 1L;
    
    private File file; //得到上传的文件
    private String fileContentType; //得到文件的类型
    private String fileFileName; //得到文件的名称
    private String author;//上传者信息
    
    public String upload(){
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        System.out.println("文件名:"+this.getFileFileName());
        System.out.println("文件类型:"+this.getFileContentType());
        System.out.println("文件:"+this.getFile());
        System.out.println("上传者:"+this.getAuthor());
        
        String realPath=ServletActionContext.getServletContext().getRealPath("/upload");
        File file_dest = new File(realPath);
        
        if(!file_dest.exists()) file_dest.mkdir();
        
        try {
//            FileUtils.copyFile(file, new File(file_dest,fileFileName));
            FileInputStream is = new FileInputStream(file);
            FileOutputStream fos = new FileOutputStream(realPath+"/"+fileFileName);
            byte[] buf = new byte[1024*1024];
            int len = 0;
            while((len = is.read(buf))!=-1){
                fos.write(buf,0,len);
            }
            is.close();
            fos.close();
            response.getWriter().write(fileFileName);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return NONE;
    }
}

第一次上传文件,能够成功:

图片描述图片描述

如果我不想上传这个文件,或者上传这个文件之后,选择其它文件再次上传时,总是上传第一次的文件,而不上传新选择的文件
图片描述图片描述

不知道为什么会出现这样的问题,百度了好久都没人遇到这种情况 ==希望大神帮我看看这是为什么 ?

阅读 2.8k
2 个回答

试试把formdata放function里

$(function(){
    $("input[name='submit']").click(function(){
        var formData = new FormData();
        formData.append("author",$("input[name='author']").val());
        formData.append("file",$("input[name='file']")[0].files[0]);
        $.ajax({
            url:'uploadfiles',
            type:'post',
            data:formData,
            processData:false,
            contentType:false,
            success:function(data){
                $("#message").html(data);
            }
        })
    })
});

用开发者工具看看请求Request Payload

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题