总的问题是怎么用javascript+C#来将网页上的图片保存到本地。
我现在已经获得了图片的url,也会用C#将指定url的图片保存到本地,但我的要求是在下面这段代码里实现,每3秒就将网页中的第一个图片元素保存到本地。 addr就是图片的url怎么样实现保存到本地。
//每3秒平移一段,点鼠标左键结束
var t=setInterval(moves,3000);
var i = 0;
function moves() {
i++;
var x = document.getElementsByTagName("img");
var addr = x[0].src;
//alert(addr);
    map.panTo(new BMap.Point(116.31557 + i * 0.029078, 39.93381));    
}
map.addEventListener("click", function() {
clearInterval(t);
});
//每3秒平移一段,点鼠标左键结束
我在网上找到一个C#保存图片到本地的代码?使用一个类实现的。关键是怎么将前后联系起来using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Drawing;/*
 * Name: 通过URL保存图片到本地
 * 
 * Author:Sungan
 * 
 * Date:2011.7.19
 * *
 */namespace SaleMapGoogle
{
    [System.Runtime.InteropServices.ComVisibleAttribute(true)]//将该类设置为com可访问
    public class LoadImag
    {        /// <summary>
        /// 从Url保存图片到本地
        /// </summary>
        /// <param name="FileName"></param>
        /// <param name="Url"></param>
        /// <returns></returns>
        public bool SavePhotoFromUrl(string FileName, string Url)
        {
            bool value = false;
            WebResponse response = null;
            Stream stream = null;            try
            {
                WebRequest request = WebRequest.Create(Url);
                response = request.GetResponse();
                stream = response.GetResponseStream();                if (!response.ContentType.ToLower().StartsWith("text/"))
                {
                    value = SaveBinaryFile(response, FileName);
                }            }
            catch (Exception err)
            {
                string aa = err.ToString();
            }
            return value;
        }        /// <summary>
        /// 
        /// </summary>
        /// <param name="response"></param>
        /// <param name="FileName"></param>
        /// <returns></returns>
        private bool SaveBinaryFile(WebResponse response, string FileName)
        {
            bool Value = true;
            byte[] buffer = new byte[1024];            try
            {
                if (!File.Exists(FileName))
                {                    Stream outStream = System.IO.File.Create(FileName);
                    Stream inStream = response.GetResponseStream();                    int l;
                    do
                    {
                        l = inStream.Read(buffer, 0, buffer.Length);
                        if (l > 0)
                            outStream.Write(buffer, 0, l);
                    }
                    while (l > 0);                    outStream.Close();
                    inStream.Close();
                }
            }
            catch
            {
                Value = false;
            }            return Value;
        }    }
}javascripturlC#网页图片保存

解决方案 »

  1.   

    自己写一个接口,接收图片URL,然后调用你找的库,把这个URL的图片保存下来。
      

  2.   

    概念首先就有问题,web程序,我们说本地,肯定是指客户端(即浏览器端),若只看你的题目,直接就可会回答你js不可以操作客户端文件.
    读了你的描述才知道,你所谓的本地指的是服务器...
    让你自己写ajax上传估计是写不出来,原理讲了估计你也无法明白,你这个先去找一个ajax文件上传组件,jquery.uploadify做的很好,但flash的,涉及sessionid问题你用起来难度估计不小;推荐jquery.ajaxupload,简单实用,然后服务端写一个文件保存的接口,你可以专门建一个aspx页面做这个接口,代码和你上面的差不多,只不过加上Response.write('...');Response.end();把是否保存成功结果返回到客户端
      

  3.   


    看错了,你的图片不是从客户端硬盘上传,
    如果是src跨域加载的远程图片,那是没办法从客户端上传到服务器的.你可以尝试在服务端做http请求获取图片
      

  4.   

    js 不能执行IO操作。没权限
      

  5.   

    js无法保存文件到客户端window.open打开服务器的一个页面并传递图片地址,这个页面负责下载远程图片保存到服务器,保存好后设置响应头content-disposition为attachment;filename="图片名称",就可以弹出保存保存图片对话框了save.aspx        string url = Request.QueryString["url"], fn = DateTime.Now.ToString("yyyyMMddHHmmssfff")+".jpg",path=Server.MapPath(fn);
            if (SaleMapGoogle.LoadImag.SavePhotoFromUrl(path, url))
            {
                Response.ContentType = "image/jpeg";
                Response.AddHeader("Content-Disposition", "attachment;filename=\"" + fn + "\"");
                Response.TransmitFile(path);
                Response.End();
            }
            else Response.Write("文件件下载失败!");var t=setInterval(moves,3000);
    var i = 0;
    function moves() {
    i++;
    var x = document.getElementsByTagName("img");
    var addr = x[0].src;
    window.open("save.aspx?url="+encodeURIComponent(addr));////////
    //alert(addr);
        map.panTo(new BMap.Point(116.31557 + i * 0.029078, 39.93381));    
    }
    map.addEventListener("click", function() {
    clearInterval(t);
    });
      

  6.   

    问一下C#代码写在什么地方?
    namespace WebApplication1
    {   
        public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {        }        
        }
    }
    写在什么位置上?
      

  7.   

    Page_Load事件里面就行了
    namespace WebApplication1
    {   
        public partial class _Default : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {        string url = Request.QueryString["url"], fn = DateTime.Now.ToString("yyyyMMddHHmmssfff")+".jpg",path=Server.MapPath(fn);
            if (SaleMapGoogle.LoadImag.SavePhotoFromUrl(path, url))
            {
                Response.ContentType = "image/jpeg";
                Response.AddHeader("Content-Disposition", "attachment;filename=\"" + fn + "\"");
                Response.TransmitFile(path);
            }
            else Response.Write("文件件下载失败!");
            }            Response.End();//停止输出aspx页面中的html
            
        }
    }
      

  8.   

    在C#代码里if()里面的类应该先实例化吧?还有就是为什么C#中的url运行的时候没有值从前台传回来啊?
      

  9.   

    url没有之传过来,我在网上找到这个方法但是看不懂:
    在C#中访问JavaScript的已有变量
    方法一:
    1、前台使用静态文本控件隐藏域,将js变量值写入其中;
    2、后台用request["id"]来获取值;
    第1句“前台使用静态文本控件隐藏域,将js变量值写入其中;”是什么意思啊?
      

  10.   


    呵呵,写错了,要创建实例,看成静态方法了。。if (new SaleMapGoogle.LoadImag().SavePhotoFromUrl(path, url))