locked
通过webservice上传文件请教大家! RRS feed

  • 问题

  • winform代码:

    FileStream fs = new FileStream(txtpic.Text, FileMode.Open);
                byte[] sendbyte = new byte[fs.Length];
                fs.Read(sendbyte, 0, sendbyte.Length);
                FileStream fs_txt = new FileStream(filePath, FileMode.Open);
                byte[] txtbyte = new byte[fs_txt.Length];
                fs_txt.Read(txtbyte, 0, txtbyte.Length);
                string content = "";
                try
                {
                    content = "1_2.jpg," + Convert.ToBase64String(sendbyte) + ";";
                    content += "1_1.txt," + Convert.ToBase64String(txtbyte);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

    webservice代码:

            byte[] bytes = Convert.FromBase64String(content);//这里貌似会报错! 请问是不是代码问题了!
            String path = @"C:\1.jpg";
            MemoryStream m = new MemoryStream(bytes);
             FileStream f = new FileStream(path, FileMode.Create);
             m.WriteTo(f);
            m.Close();
            f.Close();

    因为上传多个文件所以的编码连接在一起上传!
    • 已移动 ThankfulHeart 2012年5月23日 7:44 Web Service的问题 (发件人:Visual C#)
    2012年5月23日 5:27

答案

  • 客户端是通过webservice上传文件!  这个webservice是公开的 也要提供给别人调用上传的!

    这样做貌似风险很大……任何人都可以上传文件?!

    如果你坚持——OK!

    那么不妨建议你使用一个Dictionary<string,byte[]>的东西,string对应文件名,byte[]对应加密、解密内容,这样进行上传下载看看。

    2012年5月24日 6:39

全部回复

  • 您好yyyKai,我是微软技术支持工程师,收到“编程志愿者”移动帖子了,现回复!

    根据你的代码,我个人意见以为你把编码混合了……请注意:

     content = "1_2.jpg," + Convert.ToBase64String(sendbyte) + ";";
    content += "1_1.txt," + Convert.ToBase64String(txtbyte);

    你的“1_2.jpg”并没有编码……但是!——

      byte[] bytes = Convert.FromBase64String(content);

    你却要返回一个解码的东西?

    【建议】

    把“1_2.jpg“也编码看看——统一编码成Base64String……

    2012年5月23日 7:49
  • 您好,Decker Dong

    Convert.FromBase64String(content);

    这样解码应该是没有错的吧?

     content = "1_2.jpg," + Convert.ToBase64String(sendbyte) + ";";
    content
    += "1_1.txt," + Convert.ToBase64String(txtbyte);

    这里的1_2.jpg和1_1.txt是为了区分是图片文件还是文本文档,不知道这样做是否合理?


    • 已编辑 yyyukai 2012年5月23日 8:06 补充
    2012年5月23日 8:01
  • 您好,

    就我看来是不行的。因为“1_2.jpg”没有加密,但是你却把它和加密后的数据混淆在一起了,然后再解密,当然错误了。

    2012年5月24日 4:53
  • 您好! 我已经知道了问题所在就是因为 混在一起所以解码报错!

    请问有什么好的办法能分辨上次的文件类型吗?

    2012年5月24日 5:02
  • 您好! 我已经知道了问题所在就是因为 混在一起所以解码报错!

    请问有什么好的办法能分辨上次的文件类型吗?

    你项目中用了FileUpLoad控件吧?那就直接FileUpload.FileName判断呗……,判断后缀决定类型……
    2012年5月24日 5:35
  • 客户端这边是可以判断,在webservice服务器端这块有什么好办法判断吗?

    2012年5月24日 5:45
  • 客户端这边是可以判断,在webservice服务器端这块有什么好办法判断吗?

    你要WebService干什么?你到底在做什么呢?不明白中……???

    你把文件上传到服务器,服务端接受之后就判断保存了丫!要WebService干什么呢???

    2012年5月24日 5:47
  • webservice负责接收上传的文件,然后保存写入的路径,这个写入的路径要入库!
    2012年5月24日 6:12
  • webservice负责接收上传的文件,然后保存写入的路径,这个写入的路径要入库!

    为什么用WebService负责接受?你直接用服务器接受不可以吗?我不理解你的意图——你可否告诉我你到底要用WebService干什么?:-)

    难道你还用服务器接受了上传的文件,还要向WebService发出请求?!

    你到底要实现一个什么功能呢?:)

    2012年5月24日 6:34
  • 客户端是通过webservice上传文件!  这个webservice是公开的 也要提供给别人调用上传的!
    2012年5月24日 6:36
  • 客户端是通过webservice上传文件!  这个webservice是公开的 也要提供给别人调用上传的!

    这样做貌似风险很大……任何人都可以上传文件?!

    如果你坚持——OK!

    那么不妨建议你使用一个Dictionary<string,byte[]>的东西,string对应文件名,byte[]对应加密、解密内容,这样进行上传下载看看。

    2012年5月24日 6:39
  • 我这里只上传不提供下载和上传的地址!也要相对的用户名密码才能上传!

    请教下您说的风险是指那一块?

    2012年5月24日 6:44
  • 我这里只上传不提供下载和上传的地址!也要相对的用户名密码才能上传!

    请教下您说的风险是指那一块?

    什么文件都可以上传,万一是病毒什么的呢?有些文件危险性很高的,要小心哟:-)

    因此光判断文件扩展名估计还不够,你或许还要判断内容呢!
    2012年5月24日 6:48
  • 还要考虑客户端设置的web service调用超时吧?我做数据上传服务都是把文件分成一小块一小块上传的,没有一次上传多个文件的做法……


    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    2012年5月24日 13:55