当前位置: 首页 > 知识库问答 >
问题:

如何用Java将Int8Array保存到本地文件

田权
2023-03-14

我正在尝试使用javascript(前端)和Java(后端)在服务器磁盘上保存一个文件。

JavaScript:

在javascript中,我有一个函数将文件分块并通过Ajax发送给Java。

null

var reader, file, slice_size = (1024**2)*5;
  
  $(document).on("click", "#dbi-file-upload-submit", function(e){
    e.preventDefault();
    
    file = $("#dbi-file-upload")[0].files[0];
    reader = new FileReader();
    
    submit_file(0);
  });
  
  function submit_file(start){
    let next_slice = start+slice_size;
    let blob = file.slice(start, next_slice);

    reader.onload = function(event){
      let unit8 = new Int8Array(event.target.result);
      console.log(unit8)
      save_slice(unit8).done(function(res){
        let size_done = start + slice_size;
        let percent_done = Math.floor((size_done/file.size)*100);
        
        if(next_slice < file.size){
          $('#dbi-upload-progress').html(`Uploading File -  ${percent_done}%`);
          submit_file(next_slice);
        }else{
          $('#dbi-upload-progress').html(`Done !`);
        }
      });
      
    }
  
    reader.readAsArrayBuffer(blob);
  }
  
  function save_slice(slice){
    var form = new FormData();

    form.append("binary", slice);

    return $.ajax({
      url: '/Save.tstVideo',
      type: 'POST',
      processData: false,
      contentType: false, 
      data: form
    });
  }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form>
  <input id="dbi-file-upload" type="file"/><br><br>
  <span id="dbi-upload-progress"></span>
  <input id="dbi-file-upload-submit" class="button button-primary" type="submit" value="Upload" />
</form>

null

这是我第一次在Java编程,所以如果你有什么建议,请告诉我。

我试图在Java中创建一个函数,将ajax发送的块保存在TXT中。当javascript检测到最后一个块时,我想用Java将txt解码成文件。

这就是我试图在TXT中保存二进制文件的方法:

import java.io.*;


public class fileToDisk extends Function{   
    @Parameters("binary")
    
    public boolean fileToDisk(String binary){
      
      File file = new File("/userdata/videosmedia/test.txt");

        try (FileOutputStream fos = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(fos); DataOutputStream dos = new DataOutputStream(bos)) {
      dos.writeBytes(binary);
      //System.out.println("Successfully written data to the file");
      return true;
    }catch (IOException e) {
      e.printStackTrace();
      return false;
    }
    
    }
}

我试着用base64做,但是编码的视频不能播放,有人建议我用二进制代替base64。

共有1个答案

郝昊天
2023-03-14

对于base64string将是合适的类型,对于binary,byte[]将是我所期望的类型。

此外,自Java 7以来,更方便的Java.nio.file.files类可用,它具有更方便的编写方法。

在您的示例中,只需将接收到的字节[]追加到给定文件(使用StandardOpenOption.CreateStandardOpenOption.append)。如果希望以某种方式标记未完成的文件,可以将其命名为filename.filetype.chunks,然后在前端的最终请求中发送另一个变量(例如lastchunk=true),然后相应地重命名文件。

对于不是*.txt文件的文件,我非常不鼓励使用*.txt文件扩展名。始终保持适当的延伸。

然而,该算法只适用于来自前端的顺序调用。

 类似资料:
  • 问题内容: 假设我有一个如下所示的javascript对象: 我将其字符串化以转换为JSON。如何将此JSON保存到本地文本文件,以便可以在记事本等中打开它。 问题答案: Node.js: 浏览器(webapi):

  • 问题内容: 在Java中,我来自一个名为“ text”的String变量中的文本字段中的文本。 如何将“文本”变量的内容保存到文件中? 问题答案: 如果你只是输出文本,而不是任何二进制数据,则可以执行以下操作: 然后,将String写入其中,就像写入任何输出流一样: 与以往一样,你将需要异常处理。完成写作后,请务必致电。 如果你使用的是Java 7或更高版本,则可以使用“ 语句 ”,该语句将Pri

  • 问题内容: 我有使用Spark生成的RDD。现在,如果我将此RDD写入csv文件,则可以使用“ saveAsTextFile()”之类的一些方法,该方法将csv文件输出到HDFS。 我想将文件写入本地文件系统,以便我的SSIS进程可以从系统中选择文件并将它们加载到DB中。 我目前无法使用sqoop。 除了编写Shell脚本之外,Java中是否还有其他地方可以做到这一点? 需要任何清晰度,请告知。

  • 问题内容: 我使用以下代码将汉字保存到.txt文件中,但是当我用写字板打开它时,我看不懂它。 我能做什么 ?我知道如果将汉字剪切并粘贴到写字板中,可以将其保存到.txt文件中。如何在Java中做到这一点? 问题答案: 这里有几个因素在起作用: 文本文件没有用于描述其编码的内在元数据(就尖括号税而言,XML受欢迎是有原因的) Windows的默认编码仍然是8位(或双字节)“ ANSI ”字符集,其值

  • 问题内容: 我是Python的新手。我需要从字典中查询项目并将结果保存到文本文件中。这是我所拥有的: 如何将打印的输出保存到文本文件? 问题答案: 让我总结所有答案并添加更多答案。 要从脚本中写入文件,需要使用Python提供的用户文件I / O工具(这是东西。 如果不想修改程序,则可以使用流重定向(在Windows和类似Unix的系统上)。这是东西。 如果您想 同时 在屏幕和日志文件中看到输出,

  • 问题内容: 我想将HtmlUnit cookie保存到一个文件,然后在下一次运行时从该文件中加载它们。我怎样才能做到这一点?谢谢。 问题答案: