如何将逐个字节数组将chunck转换为base64字符串?

谢里什·贾斯瓦尔(Shailesh Jaiswal)

我们正在读取文件的字节数组,并将其转换为base64字符串,如下所示

    public static string ZipToBase64()
            {
                FileUpload fileCONTENT = FindControl("FileUploadControl") as FileUpload;

                byte[] byteArr = fileCONTENT.FileBytes;

                return Convert.ToBase64String(byteArr);

            }

    string attachmentBytes = ZipToBase64();
    string json1 = "{ \"fileName\": \"Ch01.pdf\", \"data\": " + "\"" + attachmentBytes + "\"}";

当我们尝试将最大1 GB的大文件转换为base64字符串时,它抛出了内存不足异常。我们将此json发送到Restful WCF服务。以下是我在RESTful WCF服务中的方法。

 [OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
        public void UploadFile1(Stream input)
        {

            string UserName = HttpContext.Current.Request.Headers["UserName"];
            string Password = Sql.ToString(HttpContext.Current.Request.Headers["Password"]);
            string sDevideID = Sql.ToString(HttpContext.Current.Request.Headers["DeviceID"]);
            string Version = string.Empty;
            if (validateUser(UserName, Password, Version, sDevideID) == Guid.Empty)
            {
                SplendidError.SystemWarning(new StackTrace(true).GetFrame(0), "Invalid username or password for " + UserName);
                throw (new Exception("Invalid username or password for " + UserName));
            }


            string sRequest = String.Empty;
            using (StreamReader stmRequest = new StreamReader(input, System.Text.Encoding.UTF8))
            {
                sRequest = stmRequest.ReadToEnd();
            }
            // http://weblogs.asp.net/hajan/archive/2010/07/23/javascriptserializer-dictionary-to-json-serialization-and-deserialization.aspx

            JavaScriptSerializer json = new JavaScriptSerializer();
            // 12/12/2014 Paul.  No reason to limit the Json result. 
            json.MaxJsonLength = int.MaxValue;

            Dictionary<string, string> dict = json.Deserialize<Dictionary<string, string>>(sRequest);
            string base64String = dict["data"];
            string fileName = dict["fileName"];


            byte[] fileBytes = Convert.FromBase64String(base64String);
            Stream stream = new MemoryStream(fileBytes);

            //FileStream fs1 = stream as FileStream;

            string networkPath = WebConfigurationManager.AppSettings["NetWorkPath"];
            File.WriteAllBytes(networkPath + "/" + fileName, fileBytes); // Requires System.IO
        }

请提供将大字节数组转换为base64字符串的解决方案

EVK

在wcf服务中使用Stream输入的事实并不意味着您以流方式传递任何内容。实际上,您没有这样做,因为:

  1. 您将整个文件缓冲在客户端的内存中以构建json字符串。
  2. 您可以通过将整个文件缓冲在服务器上的内存中stmRequest.ReadToEnd()

因此,没有流发生。首先,您应该意识到这里不需要json-您只需要在http请求正文中传递文件即可。您首先要做的是丢弃UploadFile1方法中安全检查下的所有代码,而是这样做:

public void UploadFile1(string fileName, Stream input) {
    // check your security headers here
    string networkPath = WebConfigurationManager.AppSettings["NetWorkPath"];
    using (var fs = File.Create(networkPath + "/" + fileName)) {
        input.CopyTo(fs);
    }
}

在这里,我们只是将输入流复制到输出流(文件)而没有任何缓冲(当然CopyTo会缓冲大块,但它们会很小)。使用以下标记您的服务方法:

[WebInvoke(Method = "POST", UriTemplate = "/UploadFile1/{fileName}")]

允许您在查询字符串中传递文件名。

现在给客户。不知道您使用哪种方法与服务器通信,我将显示带有原始HttpWebRequest的示例。

var filePath = "path to your zip file here";
var file = new FileInfo(filePath);
// pass file name in query string
var request = (HttpWebRequest)WebRequest.Create("http://YourServiceUrl/UploadFile1/" + file.Name);            
request.Method = "POST";
// set content length
request.ContentLength = file.Length;
// stream file to server
using (var fs = File.OpenRead(file.FullName)) {
    using (var body = request.GetRequestStream()) {
         fs.CopyTo(body);
    }
}
// ensure no errors
request.GetResponse().Dispose();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将逐个字节数组将chunck转换为base64字符串?

来自分类Dev

将Base64字符串解码为字节数组

来自分类Dev

将base64字符串转换为字节数组,如C#方法Convert.FromBase64String

来自分类Dev

将base64字符串转换为字节数组,如C#方法Convert.FromBase64String

来自分类Dev

如何将UTF8字符串转换为字节数组?

来自分类Dev

将原始RGB字节数组转换为JPG编码的字符串base64

来自分类Dev

如何将字节数组转换为base64编码格式?

来自分类Dev

尝试在javascript中将图像转换为Base64字符串并尝试在c#中转换为字节数组,在base64字符串中给出无效字符错误

来自分类Dev

如何将数值数组作为字符串转换为字节数组?

来自分类Dev

如何将Base64字符串转换为float数组或int数组?

来自分类Dev

如何将字符串转换为字节数组并返回

来自分类Dev

在Perl中,如何将字节数组转换为Unicode字符串?

来自分类Dev

如何将字符串转换为字节数组?

来自分类Dev

如何将base64字符串转换为文件?

来自分类Dev

如何将JSON对象转换为base64字符串?

来自分类Dev

如何将Base64字符串转换为NSData?

来自分类Dev

如何将Postgres bytea转换为base64字符串

来自分类Dev

如何将base64字符串转换为FormFile

来自分类Dev

如何将base64字符串转换为文件?

来自分类Dev

如何将图像转换为文件中的Base64字符串?

来自分类Dev

如何将Icon转换为base64字符串?

来自分类Dev

将多个字符串Base64解码为相同的字节数组

来自分类Dev

将字符串转换为字节数组

来自分类Dev

Base64无法将字符串解码为字节数组

来自分类Dev

如何使用Array ConvertAll将字符串数组转换为字节数组?

来自分类Dev

如何将字节数组转换为自定义基本字符串?

来自分类Dev

如何将保存在字节数组中的UUID转换为字符串(C ++)

来自分类Dev

如何将base64字符串转换为音频mp3文件?

来自分类Dev

如何将R plot或ggplot2转换为base64字符串?

Related 相关文章

  1. 1

    如何将逐个字节数组将chunck转换为base64字符串?

  2. 2

    将Base64字符串解码为字节数组

  3. 3

    将base64字符串转换为字节数组,如C#方法Convert.FromBase64String

  4. 4

    将base64字符串转换为字节数组,如C#方法Convert.FromBase64String

  5. 5

    如何将UTF8字符串转换为字节数组?

  6. 6

    将原始RGB字节数组转换为JPG编码的字符串base64

  7. 7

    如何将字节数组转换为base64编码格式?

  8. 8

    尝试在javascript中将图像转换为Base64字符串并尝试在c#中转换为字节数组,在base64字符串中给出无效字符错误

  9. 9

    如何将数值数组作为字符串转换为字节数组?

  10. 10

    如何将Base64字符串转换为float数组或int数组?

  11. 11

    如何将字符串转换为字节数组并返回

  12. 12

    在Perl中,如何将字节数组转换为Unicode字符串?

  13. 13

    如何将字符串转换为字节数组?

  14. 14

    如何将base64字符串转换为文件?

  15. 15

    如何将JSON对象转换为base64字符串?

  16. 16

    如何将Base64字符串转换为NSData?

  17. 17

    如何将Postgres bytea转换为base64字符串

  18. 18

    如何将base64字符串转换为FormFile

  19. 19

    如何将base64字符串转换为文件?

  20. 20

    如何将图像转换为文件中的Base64字符串?

  21. 21

    如何将Icon转换为base64字符串?

  22. 22

    将多个字符串Base64解码为相同的字节数组

  23. 23

    将字符串转换为字节数组

  24. 24

    Base64无法将字符串解码为字节数组

  25. 25

    如何使用Array ConvertAll将字符串数组转换为字节数组?

  26. 26

    如何将字节数组转换为自定义基本字符串?

  27. 27

    如何将保存在字节数组中的UUID转换为字符串(C ++)

  28. 28

    如何将base64字符串转换为音频mp3文件?

  29. 29

    如何将R plot或ggplot2转换为base64字符串?

热门标签

归档