ajaxFileUpload上传图片成功后返回图片第一时间加载不出来,图片地址正确

z810276431 2016-06-16 02:23:20
上传的是tomcat服务器目录中,右键点击未显示的图片重新打开一个新的页面图片可以正常显示
如果在ajax返回中打上断点(debugger),稍微等2秒在执行也可以加载图片

...全文
537 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
huxiangen 2016-11-10
  • 打赏
  • 举报
回复
最后找到问题没有?
洛鸣生 2016-06-20
  • 打赏
  • 举报
回复
地址是否正确
z810276431 2016-06-20
  • 打赏
  • 举报
回复
有知道的大神来解答一下嘛
dx880803 2016-06-20
  • 打赏
  • 举报
回复
tomcat用来坐路径的话,只要页面的url发生变化,或者重启tomcat或者随意的改动页面的任何东西,原始上传的文件就会消失, 你把上传的路径不要放到tomcat里面 放入D盘或者E盘的自定义的文件里面,会解决你的问题。
娱乐天空 2016-06-20
  • 打赏
  • 举报
回复
试试不用相对路径
z810276431 2016-06-17
  • 打赏
  • 举报
回复
@RequestMapping("upload")
	@ResponseBody
	public String uploadPreviewImage(HttpServletRequest request, HttpServletResponse response) throws IOException{  
	    MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;  
	    MultipartFile image = multipartRequest.getFile("advImage");  
	      
	    //临时图片路径
	    String dirPath = TEMP_PICTURE_PATH;
	    File filePath = new File(dirPath);
		if (!filePath.exists()) {
			filePath.mkdirs();
		}
	    // 组合临时图片名  
	    String imageName = image.getOriginalFilename();  
	    String file_ext = imageName.substring(imageName.lastIndexOf(".") + 1);  
	    SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT);  
	    String tempImageName = UNDERLINE + df.format(new Date()) + "." + file_ext;          
	      
	    // 存放浏览图片的零时文件路径  
	    File file = new File(request.getSession().getServletContext().getRealPath(dirPath +   
	            tempImageName));  
	      
	    byte[] advImageBytes = null;  
	    InputStream advImageStream = null; 
	    FileOutputStream os = null;
	      
	    try {  
	        /*file.createNewFile();  
	        advImageStream = image.getInputStream();  
	        advImageBytes = FileCopyUtils.copyToByteArray(advImageStream);  
	        FileCopyUtils.copy(advImageBytes, file);  
	        advImageStream.close();  */
	    	advImageStream = image.getInputStream(); 
	    	os=new FileOutputStream(file);
	    	//创建一个缓冲区
            byte buffer[] = new byte[1024];
	       //判断输入流中的数据是否已经读完的标识
	        int len = 0;
	       //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
            while((len=advImageStream.read(buffer))>0){
                    //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
            	os.write(buffer, 0, len);
                }
            	os.flush();
	    } catch (IOException e) {  
	 
	        e.printStackTrace();  
	    }finally{
	        //关闭输入流
            advImageStream.close();
             //关闭输出流
             os.close();
	    }
	      
	    
	    String tempPath =  dirPath +   
	     tempImageName;  
	      
	  //  String s = "{"+"\"tempPath\":\""+tempPath+"\","+"\"msg\":\"\""+"}";
	    // 传给页面相对路径  
	    /*out.print("{");    
	    out.print("\"tempPath\":\""+tempPath+"\",");   
	    out.print("\"msg\":\"\"");   
	    out.print("}");
	    out.flush();  
	    out.close(); */
	    
	    // ajax  
	   Map<String, Object> result = new HashMap<String,Object>();
	    result.put("tempPath", tempPath);
	    result.put("msg", "");
	    return JSON.toJSONString(result);  
	}  
这是java的

$.ajaxFileUpload({url:"upload.do",  
        secureuri:false,  
        fileElementId:"advImage",  
        dataType:"json",
        success:function (data , status) {  
        	returnData = data;
        	// 这个方法是现实一个div,托住截图框  
            $("#cutImageDiv").show(); 
	         // 一些变量在页面的隐藏input的设置  
	         location = ctx_+returnData.tempPath;
	         $("#photo").attr('src',ctx_+returnData.tempPath+''); 
       	     $("#currentPath").val(returnData.tempPath);
       	   
        },  
        error:function (data, status, e) {  
            //alert("图片上传失败,请重新选择图片"); 
        }  
    }); 
这是js的
s09122289 2016-06-17
  • 打赏
  • 举报
回复
无代码 无真相
z810276431 2016-06-17
  • 打赏
  • 举报
回复
有大神出来解答一下么
z810276431 2016-06-16
  • 打赏
  • 举报
回复
引用 5 楼 qnmdcsdn 的回复:
[quote=引用 4 楼 z810276431 的回复:] [quote=引用 3 楼 qnmdcsdn 的回复:] 等待一两秒就可以显示?你这是上传后立即显示?不晓得是什么情况
恩,我这个做的是ajax上传后,吧图片路径返回,然后用jqeury的src方法替换掉原来图片的地址[/quote] 那估计是你返回路径后显示的时候服务器那边图片还没写好的吧,哈哈哈,纯属猜测,看看你保存图片的代码是怎么写的[/quote]
 // 组合临时图片名  
	    String imageName = image.getOriginalFilename();  
	    String file_ext = imageName.substring(imageName.lastIndexOf(".") + 1);  
	    SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT);  
	    String tempImageName = UNDERLINE + df.format(new Date()) + "." + file_ext;          
	      
	    // 存放浏览图片的零时文件路径  
	    File file = new File(request.getSession().getServletContext().getRealPath(dirPath +   
	            tempImageName));  
	      
	    byte[] advImageBytes = null;  
	    InputStream advImageStream = null;  
	      
	    try {  
	        file.createNewFile();  
	        advImageStream = image.getInputStream();  
	        advImageBytes = FileCopyUtils.copyToByteArray(advImageStream);  
	        FileCopyUtils.copy(advImageBytes, file);  
	        advImageStream.close();  
	    } catch (IOException e) {  
	 
	        e.printStackTrace();  
	    }  
	      
上传方法应该没问题吧,毕竟图片确实已经存放在目录里了,只是第一时间加载不出来,因为之前一直用的ftp上传,这次写的一个测试demo用到临时文件,就把放在服务器目录中了
  • 打赏
  • 举报
回复
引用 4 楼 z810276431 的回复:
[quote=引用 3 楼 qnmdcsdn 的回复:] 等待一两秒就可以显示?你这是上传后立即显示?不晓得是什么情况
恩,我这个做的是ajax上传后,吧图片路径返回,然后用jqeury的src方法替换掉原来图片的地址[/quote] 那估计是你返回路径后显示的时候服务器那边图片还没写好的吧,哈哈哈,纯属猜测,看看你保存图片的代码是怎么写的
z810276431 2016-06-16
  • 打赏
  • 举报
回复
引用 3 楼 qnmdcsdn 的回复:
等待一两秒就可以显示?你这是上传后立即显示?不晓得是什么情况
恩,我这个做的是ajax上传后,吧图片路径返回,然后用jqeury的src方法替换掉原来图片的地址
  • 打赏
  • 举报
回复
等待一两秒就可以显示?你这是上传后立即显示?不晓得是什么情况
z810276431 2016-06-16
  • 打赏
  • 举报
回复
引用 1 楼 qnmdcsdn 的回复:
f12,看看有没有什么报错
有报错,提示404,但是这个文件已经上传到服务器文件夹中了,而且把url在打开是有图片的
  • 打赏
  • 举报
回复
f12,看看有没有什么报错

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧