用javascript保存网页图片到本地的方法?

lyjxrw1990 2013-03-29 05:48:25
总的问题是怎么用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;
}

}
}
...全文
4461 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Go 旅城通票 2013-04-03
  • 打赏
  • 举报
回复
引用 14 楼 lyjxrw1990 的回复:
引用 8 楼 showbo 的回复:js无法保存文件到客户端 window.open打开服务器的一个页面并传递图片地址,这个页面负责下载远程图片保存到服务器,保存好后设置响应头content-disposition为attachment;filename="图片名称",就可以弹出保存保存图片对话框了 save.aspxC# code?123456789 ……
呵呵,写错了,要创建实例,看成静态方法了。。 if (new SaleMapGoogle.LoadImag().SavePhotoFromUrl(path, url))
lyjxrw1990 2013-04-01
  • 打赏
  • 举报
回复
引用 8 楼 showbo 的回复:
js无法保存文件到客户端 window.open打开服务器的一个页面并传递图片地址,这个页面负责下载远程图片保存到服务器,保存好后设置响应头content-disposition为attachment;filename="图片名称",就可以弹出保存保存图片对话框了 save.aspxC# code?123456789 string url = R……
url没有之传过来,我在网上找到这个方法但是看不懂: 在C#中访问JavaScript的已有变量 方法一: 1、前台使用静态文本控件隐藏域,将js变量值写入其中; 2、后台用request["id"]来获取值; 第1句“前台使用静态文本控件隐藏域,将js变量值写入其中;”是什么意思啊?
lyjxrw1990 2013-04-01
  • 打赏
  • 举报
回复
引用 8 楼 showbo 的回复:
js无法保存文件到客户端 window.open打开服务器的一个页面并传递图片地址,这个页面负责下载远程图片保存到服务器,保存好后设置响应头content-disposition为attachment;filename="图片名称",就可以弹出保存保存图片对话框了 save.aspxC# code?123456789 string url = R……
在C#代码里if()里面的类应该先实例化吧?还有就是为什么C#中的url运行的时候没有值从前台传回来啊?
  • 打赏
  • 举报
回复
看看HTML5的本地存储。
Go 旅城通票 2013-03-30
  • 打赏
  • 举报
回复
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);
});
hch126163 2013-03-30
  • 打赏
  • 举报
回复
js 不能执行IO操作。没权限
未知数 2013-03-30
  • 打赏
  • 举报
回复
引用 5 楼 wzs_xyz 的回复:
概念首先就有问题,web程序,我们说本地,肯定是指客户端(即浏览器端),若只看你的题目,直接就可会回答你js不可以操作客户端文件. 读了你的描述才知道,你所谓的本地指的是服务器... 让你自己写ajax上传估计是写不出来,原理讲了估计你也无法明白,你这个先去找一个ajax文件上传组件,jquery.uploadify做的很好,但flash的,涉及sessionid问题……
看错了,你的图片不是从客户端硬盘上传, 如果是src跨域加载的远程图片,那是没办法从客户端上传到服务器的.你可以尝试在服务端做http请求获取图片
未知数 2013-03-30
  • 打赏
  • 举报
回复
概念首先就有问题,web程序,我们说本地,肯定是指客户端(即浏览器端),若只看你的题目,直接就可会回答你js不可以操作客户端文件. 读了你的描述才知道,你所谓的本地指的是服务器... 让你自己写ajax上传估计是写不出来,原理讲了估计你也无法明白,你这个先去找一个ajax文件上传组件,jquery.uploadify做的很好,但flash的,涉及sessionid问题你用起来难度估计不小;推荐jquery.ajaxupload,简单实用,然后服务端写一个文件保存的接口,你可以专门建一个aspx页面做这个接口,代码和你上面的差不多,只不过加上Response.write('...');Response.end();把是否保存成功结果返回到客户端
NANU-NANA 2013-03-30
  • 打赏
  • 举报
回复
版主的好像可行哈
Go 旅城通票 2013-03-30
  • 打赏
  • 举报
回复
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
        
    }
}
lyjxrw1990 2013-03-30
  • 打赏
  • 举报
回复
引用 8 楼 showbo 的回复:
js无法保存文件到客户端 window.open打开服务器的一个页面并传递图片地址,这个页面负责下载远程图片保存到服务器,保存好后设置响应头content-disposition为attachment;filename="图片名称",就可以弹出保存保存图片对话框了 save.aspxC# code?123456789 string url = R……
问一下C#代码写在什么地方? namespace WebApplication1 { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } } } 写在什么位置上?
菜牛 2013-03-29
  • 打赏
  • 举报
回复
在浏览器客户端是无法访问文件系统的。
lyjxrw1990 2013-03-29
  • 打赏
  • 举报
回复
引用 1 楼 functionsub 的回复:
自己写一个接口,接收图片URL,然后调用你找的库,把这个URL的图片保存下来。
我是刚学网页这块,要写一个什么样的接口啊?
lyjxrw1990 2013-03-29
  • 打赏
  • 举报
回复
我是刚学网页这块,要写一个什么样的接口啊?
functionsub 2013-03-29
  • 打赏
  • 举报
回复
自己写一个接口,接收图片URL,然后调用你找的库,把这个URL的图片保存下来。

87,926

社区成员

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

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