java multipart上传使用php web服务签名的amazon s3 url

时间:2014-02-25 18:42:16

标签: java amazon-web-services amazon-s3 apache-httpclient-4.x multipartentity

我正在开发一个项目,该项目使用amazon s3存储用户的所有文件。它由Web应用程序和桌面客户端组成。桌面应用程序是用java构建的。要将文件从桌面应用程序上传到amazon s3,我要求在php中构建一个Web服务,以生成一个用于上传的已签名的amazon s3网址(使用s3类php)。桌面应用程序使用此URL上传文件。使用java中的Multipart上传完成文件上传。所有文件都已成功上传,但在开头和结尾添加的文件很少。我无法弄清楚为什么这些额外的行被加起来

我在上传之前上传了一个文件a.txt,其内容为“abcd”。但是当他们使用桌面java客户端上传到amazon s3时,会向它添加几行,并且上传的文件如下所示

 --y1IIH7wF3YYSFQ-R-Gwels7Wysmiosm91sYdNZ
Content-Disposition: form-data; name="attachment"
Content-Type: text/plain
Content-Transfer-Encoding: binary

abcd
--y1IIH7wF3YYSFQ-R-Gwels7Wysmiosm91sYdNZ—

这是java代码

File file = new File("D:\\a.txt") ;
 Path source = Paths.get(file.getPath());
String mimeType = Files.probeContentType(source);
HttpPut put = new HttpPut (secretUrlFromWebServicePHP) ;
        put.setHeader("Content-Type",mimeType);
        put.setHeader("x-amz-acl","authenticated-read");
        try
        {
            MultipartEntity multiPartEntity = new MultipartEntity () ;
            ContentBody fileBody = new FileBody(file, ContentType.create(mimeType)) ;
            multiPartEntity.addPart("attachment", fileBody) ;
            put.setEntity(multiPartEntity) ;
            response = client.execute(put) ;
       }
Catch(Exception e)
{
}

我已经验证了PHP Web服务返回的签名URL并且它是有效的。使用该签名的URL我已经使用ajax上传到亚马逊s3,它工作正常。但是当我在java中使用分段上传上传它时,它会在文件中添加一些额外的行。任何人都可以向我推荐我做错的事情

0 个答案:

没有答案