如何接收文件流并存成图片

bejco 2007-11-09 02:04:45
程序目的是要接收flash发送过来的图片文件的二进制流,并生成图片。下面是jsp的代码,哪位大侠能帮忙用c#重写呢?.net2.0

<%@ page contentType="text/html; charset=utf-8" language="java"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<%
int v;
String filePath = request.getRealPath(System.currentTimeMillis()+".jpg");
BufferedInputStream inputStream = new BufferedInputStream(request.getInputStream());
FileOutputStream outputStream = new FileOutputStream(new File(filePath));
byte [] bytes = new byte[1024];
while((v=inputStream.read(bytes))>0){
outputStream.write(bytes,0,v);
}
outputStream.close();
inputStream.close();
%>

多谢!
...全文
1529 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bejco 2007-12-05
  • 打赏
  • 举报
回复
public partial class picUpStream : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void bt_upload_Click(object sender, EventArgs e)
{
try
{

Stream fileFullStream = FileUpload1.PostedFile.InputStream;//这里获取文件流
//Stream fileFullStream = Request.InputStream;//如果是从网络获取文件流则可以使用request方法
if (fileFullStream.Length < 1)
{
this.lb_info.Text = "请选择文件";
return;
}


// BufferedStream bfs = new BufferedStream(fileFullStream);
int buffersize = (int)fileFullStream.Length;//获取流的长度
byte[] buffer = new byte[buffersize];//把文件流转化成字节数组
int count = fileFullStream.Read(buffer, 0, buffersize);//读取文件
string picNewName = DateTime.Now.ToString("yyyyMMddHHmmssffff");//取当前时间戳作为新文件名
string serverpath = Server.MapPath("~/picUp") + "\\" + picNewName+ ".jpg";//文件保存路径
FileStream fs = new FileStream(serverpath, FileMode.Create, FileAccess.Write);//创建文件
fs.Write(buffer, 0, buffersize);//写入数据
fs.Flush();//清出缓冲区
fs.Close();//关闭流
this.lb_info.Text = "文件上传成功!";

}

catch (Exception ex)
{
this.lb_info.Text = "上传发生错误。原因是:" + ex.ToString();
}
}
}


bejco 2007-12-05
  • 打赏
  • 举报
回复
问题我已解决,多谢大家。
bejco 2007-11-09
  • 打赏
  • 举报
回复
多谢hr01071008 ,我试试看啊.
hr01071008 2007-11-09
  • 打赏
  • 举报
回复
呵呵...我以前学习过,怎么把图片放入数据库,并显示在网页上.下面把我的学习笔记放上来,有点乱,希望对你有点启示.
图像文件是二进制形式存在的,在SQL Server数据库中,图像字段类型是image,它实际存放的是二进制数据,
因此,数据库中的图像存取操作实际就是二进制存取操作.

//fulImage是上传文件的服务端控件.


byte[] imageArray = null;
if (fulImage.PostedFile.FileName != "")
{
//定义用于处理像素数据定义的图像的对象.
Bitmap bookImage = new Bitmap(fulImage.PostedFile.FileName);
//创建缓冲区
MemoryStream mStream = new MemoryStream();
//设置以图片的格式写入缓冲区
bookImage.Save(mStream, ImageFormat.Jpeg);
//将缓冲区内容转换为字节数组
imageArray = mStream.ToArray();
}
把imageArray写进数据库对应的字段就可以了.



//显示数据库中的图片数据.
//优点:是封装性好,外部只要调用这个一般处理程序Handler.ashx就能在叶面上显示图片.
//缺点:图片的格式必须和数据保存时的格式一致.
//( ImageFormat.Jpeg-----context.Response.ContentType = "image/jpeg";).

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Drawing;
using System.Drawing.Imaging;

public class Handler : IHttpHandler {

public bool IsReusable
{
get {return false;}
}

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "image/jpeg";
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.BufferOutput = true;

int photoId = 15;
Bitmap bitmap = null;

if (context.Request.QueryString["PhotoID"] != null &&
context.Request.QueryString["PhotoID"] != "")
{
photoId = Convert.ToInt32(context.Request.QueryString["PhotoID"]);
bitmap = GetPhoto(photoId);
}
if (bitmap != null)
{
//显示图片.如果有图片控件,只要图片控件的Image属性等于bitmap就好.
bitmap.Save(context.Response.OutputStream, ImageFormat.Jpeg);
bitmap.Dispose();
}

context.Response.Flush();
}


public Bitmap GetPhoto(int photoId)
{
SqlConnection myConnection = new SqlConnection(
ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);
SqlCommand myCommand = new SqlCommand
("SELECT [Image] FROM [SmallClass] WHERE [Id]=@PhotoID",
myConnection);
myCommand.CommandType = CommandType.Text;
myCommand.Parameters.Add(new SqlParameter("@PhotoID", photoId));
myConnection.Open();
object result = myCommand.ExecuteScalar();
//关键的代码.
MemoryStream stream = new MemoryStream();
try
{
if (result.ToString() != "")
{
byte[] image = (byte[])result;
stream.Write(image, 0, image.Length);
Bitmap bitmap = new Bitmap(stream);
return bitmap;
}
else
{ return null; }
}
catch (ArgumentNullException e)
{
return null;
}
finally
{
myConnection.Close();
}
}


}


下面的方法也可以,并且这个方法,不管是什么文件都可以保存在数据库吧.

protected void btnSave_Click(object sender, EventArgs e)
{
if(FileUpload1.HasFile == true)
{
//产生Stream流对象
Stream myStream = FileUpload1.PostedFile.InputStream;
//得到文件的信息
FileInfo myfile = new FileInfo(FileUpload1.PostedFile.FileName);
int length = (int)myStream.Length;
//产生字节数组对象
byte[] bytes = new byte[length];
//读取文件,将数据放入字节数组中.
myStream.Read(bytes, 0, length);
//关闭流.
myStream.Close();
//保存到数据库中
InsertToDb(myfile.Name, myfile.Extension, bytes);
//重新绑定数据.即刷新GridView中的数据.
GridView1.DataBind();

}
}

private void InsertToDb(string FileName, string FileExt, Byte[] FileContent)
{
SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings["tempdbConnectionString"].ToString());
string sql = "INSERT INTO Adjunct(FileName, FileExt, FileContent) VALUES (@FileName, @FileExt, @FileContent)";
SqlCommand cmd = new SqlCommand(sql, cn);
cmd.Parameters.AddWithValue("@FileName", FileName);
cmd.Parameters.AddWithValue("@FileExt", FileExt);
cmd.Parameters.AddWithValue("@FileContent", FileContent);
try
{
cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
cn.Dispose();
cmd.Dispose();
}
catch
{
if (cn.State == ConnectionState.Open)
{
cn.Close();
}
cn.Dispose();
cmd.Dispose();
}
}




ojekleen 2007-11-09
  • 打赏
  • 举报
回复
出错是不是没有引用命名空间?using.System.IO;
bejco 2007-11-09
  • 打赏
  • 举报
回复
为什么编译的时候出错呢?
bejco 2007-11-09
  • 打赏
  • 举报
回复
多谢virusplayer

这样就是完整的了吗?
virusswb 2007-11-09
  • 打赏
  • 举报
回复
byte[] bts = this.getdbBytes();
MemoryStream ms = new MemoryStream(bts);
Image img = Image.FromStream(ms);
bejco 2007-11-09
  • 打赏
  • 举报
回复
自己顶一下先.

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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