文档章节

通过文件流的方式上传文件

邓小峰
 邓小峰
发布于 2009/03/26 20:49
字数 499
阅读 5609
收藏 1

上传文件有四种方式

1:fileupload

2:ftp

3:网络共享

4:文件流写入

我们经常碰到这种困惑,大家都知道fileupload可以通过saveas方法存储文件,但是如果我们想把上传的文件写入到网络中其他服务器该怎么办呢?这样做有两个好处

1:文件集中存储

2:便于扩展

3:便于备份

因为我们接受上传的aspx.cs文件运行于某台服务器,但是我们要写入另外一台服务器,该怎么办呢?通常有三种方法:FTP、文件流写入、网络共享(我还没试验成功)

文件流写入DEMO:

index.aspx

<%@ Page Language="C#" AutoEventWireup="true" Debug="true" CodeFile="index.aspx.cs" Inherits="_Index" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:FileUpload ID="FileUpload1" runat="server" /><br />
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="ok" Width="67px" />&nbsp;</div>
    </form>
</body>
</html>

index.aspx.cs

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Net;

public partial class _Index : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (FileUpload1.HasFile)
        {
            byte[] postdata = FileUpload1.FileBytes;
            FileUpload1.SaveAs(@"D:\project\TestUpload\upload\" + FileUpload1.FileName);
            HttpWebRequest httprequest = (HttpWebRequest)System.Net.WebRequest.Create("http://dxf.3g.cn:81/uploadfilestream.aspx?filename=" + FileUpload1.FileName);
            httprequest.Method = "POST";
            httprequest.KeepAlive = false;
            httprequest.ContentType = "multipart/form-data";
            httprequest.Timeout = 10*1000;
            httprequest.ContentLength = postdata.Length;
            Stream sr=httprequest.GetRequestStream();
            sr.Write(postdata, 0, postdata.Length);
            HttpWebResponse respon = (HttpWebResponse)httprequest.GetResponse();
            if (httprequest.HaveResponse)
            {
                Response.Write("向另外一个服务器post成功");
                HttpWebResponse rs = (HttpWebResponse)httprequest.GetResponse();
                Stream rstream = respon.GetResponseStream();
                StreamReader rstreamread = new StreamReader(rstream);
                Response.Write(rstreamread.ReadToEnd());
            }
            else
            {
                Response.Write("向另外一个服务器post失败");
            }
            sr.Close();
        }
    }
}

 

另一台机器的代码

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Net;

public partial class uploadfilestream : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string filename = Request["filename"];
        Stream stream = Request.InputStream;
        byte[] buffer = new byte[stream.Length];
        stream.Read(buffer, 0, (int)stream.Length);
        File.WriteAllBytes(@"D:\project\TestUploadStream\upload\" + filename, buffer);
        Response.Write("上传成功" + filename);
        /*
        HttpWebRequest res = (HttpWebRequest)WebRequest.Create("http://dxf.3g.cn:81/test.aspx");
        HttpWebResponse respon = (HttpWebResponse)res.GetResponse();
        Stream restream= respon.GetResponseStream();
        StreamReader srm = new StreamReader(restream);
        Response.Write(srm.ReadToEnd());
         * */
    }
}

 

FTP写入:

© 著作权归作者所有

共有 人打赏支持
邓小峰
粉丝 26
博文 38
码字总数 17272
作品 0
广州
高级程序员
私信 提问
谈一谈大文件上传——前台分片和后台合并

欢迎光临我的博客拓跋的前端客栈,这个是原文地址。如果您发现我文章中存在错误,请尽情向我吐槽,大家一起学习一起进步φ(>ω<*) 最近做了一个需求,需要上传镜像的tar包,小的3、5G,大的可...

zhleven
2018/01/04
0
0
JavaWeb实现文件上传与下载

增强HttpServletResponse对象 1. 实现一个增强的HttpServletResponse类,需要继承javax.servlet.http.HttpServletRequestWrapper类,通过重写自己需要增强的方法来实现(这种模式就叫做装饰者...

江左煤郎
2018/09/17
0
0
Struts2实现文件上传和下载

在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,...

颖辉小居
2015/11/26
58
0
.NetCore上传多文件的几种示例

本章和大家分享的是.NetCore的MVC框架上传文件的示例,主要讲的内容有:form方式提交上传,ajax上传,ajax提交+上传进度效果,Task并行处理+ajax提交+上传进度,相信当你读完文章内容后能后好...

神牛步行3
2017/05/05
0
0
.net mvc + layui做图片上传(二)—— 使用流上传和下载图片

摘要:上篇文章写到一种上传图片的方法,其中提到那种方法的局限性,就是上传的文件只能保存在本项目目录下,在其他目录中访问不到该文件。这与浏览器的安全性机制有关,浏览器不允许用户用任...

CherishTheYouth
01/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

关于360插件化Replugin Activity动态修改父类的字节码操作

近期在接入360插件化方案Replugin时,发现出现崩溃情况。 大概崩溃内容如下: aused by: java.lang.ClassNotFoundException: Didn't find class "x.x.x.xActivity" on path: 我自己在插件代码......

Gemini-Lin
58分钟前
0
0
mybatis缓存的装饰器模式

一般在开发生产中,对于新需求的实现,我们一般会有两种方式来处理,一种是直接修改已有组件的代码,另一种是使用继承方式。第一种显然会破坏已有组件的稳定性。第二种,会导致大量子类的出现...

算法之名
昨天
17
0
单元测试

右键方法 Go To --> Test,简便快速生成测试方法。 相关注解 @RunWith(SpringRunner.class) 表示要在测试环境中跑,底层实现是 jUnit测试工具。 @SpringBootTest 表示启动整个 Spring工程 @A...

imbiao
昨天
4
0
欧拉公式

欧拉公式表达式 欧拉公式的几何意 cosθ + j sinθ 是个复数,实数部分也就是实部为 cosθ ,虚数部分也就是虚部为 j sinθ ,对应复平面单位圆上的一个点。 根据欧拉公式和这个点可以用 复指...

sharelocked
昨天
5
0
burpsuite无法抓取https数据包

1.将浏览器和burpsuite的代理都设置好 2.在浏览器地址栏输入: http://burp 3.下载下面的证书,并将证书导入浏览器 cacert.der

Frost729
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部