使用REST将映像文件上传到服务器时,上传的文件与原始客户端文件不匹配

时间:2019-05-02 16:48:08

标签: javascript java angularjs rest file-upload

我有一个Javascript前端和一个Java后端。对于前端HTML和Javascript,我使用了堆栈溢出这里已经有人提供的解决方案。

HTML(提供):

ghc

JAVASCRIPT /控制器:

<input type="file" name="file" onchange=angular.element(this).scope().uploadedFiles(this.files)"/>

通过REST(Java代码)访问的后端方法

$scope.uploadFiles = function(files) {
    var fd = new FormData();
    //Take the first selected file
    fd.append("file", files[0]);
    var uploadUrl = GlobalService.resourceUrl('/equipment/imageupload');

    $http.post(uploadUrl, fd, {
        withCredentials: true,
        headers: {'Content-Type': 'application/json' },
        transformRequest: angular.identity
    });
};

当我选择一个文件时,就会出现该帖子,并且可以正确访问我的Java后端代码。将以下内容打印到控制台:

@POST
@Path("/imageupload")
@Consumes(MediaType.APPLICATION_JSON)
public void uploadImage(InputStream uploadedStream)
{
   try
{
   File f = new File("C:\\Users\\myself\\myImage.jpg);
   OutputStream os = new FileInputStream(f);
   byte[] buf = new byte[1024];
   int len;
   while ((len = uploadedStream.read(buf)) > 0)
   {
      os.write(buf,0,len);
   }
   uploadedStream.close();
   os.close();
}
catch (Exception e)
{
   System.out.println("ERROR Uploading Image File);
}
System.out.println("Read input stream complete.");
}

上传的文件大于源文件。上传的服务器文件= 53020字节,源客户端文件= 52799字节。有人知道导致此问题的原因吗?

编辑:有人要求打印两个文件,我要做的就是发布Windows命令fc / b的一些结果。问题是我开发时所在的同一计算机上没有Internet访问权限,并且它们之间没有网络路径。 fc / b原始文件已上传文件 这是我上传的PNG文件的结果,该问题具有相同类型的问题:(LEFT =客户原始PNG文件,RIGHT =上传的PNG文件)

-------WebKitFormBoundaryRANDOCHARACTERS
Content-Disposition: form-data; name = "file"; filename="mySourceImage.jpg"
Content-Type: image/jpeg

A LONG GROUP OF CHARACTERS THAT MUST BE THE IMAGE CONTENT

从这里开始,您将获得客户端PNG文件开头的?PNG: (此处仅显示服务器文件字节列:)

00000000 89 2D
00000001 50 2D
00000002 4E 2D
00000003 47 2D
00000004 0D 2D 
00000005 0A 2D
00000006 1A 57
00000007 0A 65
00000008 00 62
00000009 00 4B

我希望这会有所启发。对于png文件,服务器文件比客户端长180个字节。由于上载的PNG文件的开头似乎有134个字符的“垃圾邮件”,因此它不像截断上载的PNG文件的前N个字节那样简单。

0 个答案:

没有答案