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

Android-图像上载到REST服务器时出现问题:不支持图像格式

郭修平
2023-03-14

我正在尝试从我的Android应用程序上传一个图像到rest服务器。图片确实上传了,但在服务器上,照片查看器或其他图片应用程序无法打开上传的图片。我在服务器上使用netbeans 7中的glassfish 3。我不使用maven,我更喜欢非Moven解决方案。

下面是我用来在一个运行程序中从android上传图片的代码

@Override
        public void run() {
            // TODO Auto-generated method stub
try{

                HttpClient httpClient = new DefaultHttpClient();
                HttpContext httpContext = new BasicHttpContext();
                Bitmap original = BitmapFactory.decodeFile(path);
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                original.compress(Bitmap.CompressFormat.JPEG, 77, out);
                byte[] data = out.toByteArray();

                ByteArrayBody bab = new ByteArrayBody(data,"image.JPG");

                MultipartEntityBuilder mpeb = MultipartEntityBuilder.create();
                mpeb.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
                mpeb.addBinaryBody("file", data, ContentType.create("image/jpg"), "image.jpeg");
                HttpPost request = new HttpPost(url);
                request.setEntity(mpeb.build());
                request.addHeader("Content-type","multipart/form-data");
                HttpResponse response = httpClient.execute(request,httpContext);
                HttpEntity entity = response.getEntity();
                if(response.getStatusLine().getStatusCode()== 201){
                    Log.w("ced", "pic success");
                }else{
                    Log.w("ced", "pic failed ,code "+response.getStatusLine().getStatusCode());
                }
            }catch(Exception e){
                Log.e("error",e.getMessage());
            }
        }
@POST
@Path("/imgs/")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response saveImage(@FormDataParam("file") InputStream is
                          ){
    try {

        FileOutputStream os = new FileOutputStream(new     File("C:/Users/files/Downloads/"+"img.jpg"));

        Utils.copyFileStream(is, os);

        os.flush();
        os.close();
        return Response.status(201).entity("reached").build();
    } catch (FileNotFoundException ex) {
        Logger.getLogger(RestW.class.getName()).log(Level.SEVERE,     null, ex);
    }catch(IOException e){
         Logger.getLogger(RestW.class.getName()).log(Level.SEVERE, null, e);
    }
 return Response.status(500).entity("error").build();

}

我尝试在AddBinaryBody中将mime类型更改为multipart/form-data和multipart/*。尽管如此,图像还是无法打开。

当我添加另一个@FormDataParam()(用于内容处理)时,它显示以下错误:

Severe:缺少方法public javax.ws.rs.core.response的依赖关系Severe:method,public javax.ws.rs.core.response com.proj.test.restw.SaveImage(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition),用资源的POST注释,类com.proj.test.restw,不能被识别为有效的资源方法。

当我删除内容配置参数,它工作良好,但图像不能打开。

提前致谢

共有1个答案

颜修明
2023-03-14

这是对我起作用的代码

private void sendPics(ArrayList<String> paths){

        for(int i = 0;i<paths.size();i++){
            String p = paths.get(i);

            try{
            Bitmap original = BitmapFactory.decodeFile(p);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            original.compress(Bitmap.CompressFormat.JPEG, 100, out);
            byte[] data = out.toByteArray();

            HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
            connection.setReadTimeout(10000);
            connection.setConnectTimeout(15000);
            connection.setRequestMethod("POST");
            connection.setUseCaches(false);
            connection.setDoInput(true);
            connection.setDoOutput(true);

            connection.setRequestProperty("Connection", "Keep-Alive");
            connection.setRequestProperty("Cache-Control", "no-cache");
            connection.setRequestProperty("Content-Type", "multipart/form-data");

            DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream());
            dataOutputStream.write(data);
            dataOutputStream.flush();
            dataOutputStream.close();
            int c = connection.getResponseCode();

            connection.disconnect();

        }catch(Exception e){
            Log.e("cedError",e.getMessage());
        }
        }   

    }
}
 类似资料:
  • 我的MainActivity代码在这里:

  • > //这是我的java代码,firebase部分仅在以下条件下工作正常(requestCode==102){br>//imageuri=data.getData(); imageuri;public static final int PICK\u IMAGE=1@重写受保护的void onCreate(Bundle savedInstanceState){super.onCreate(saved

  • 我用python scrapy编写了一个脚本,从一个网站下载一些图片。当我运行我的脚本时,我可以在控制台中看到图像的链接(它们都是格式)。然而,当我打开下载完成时应该保存图像的文件夹时,我什么也没有看到。我犯错的地方? 这是我的蜘蛛(我正在从Sublime文本编辑器运行): 这是我在中为要保存的图像定义的内容: 为了让事情更清楚: 我希望保存图像的文件夹名为,我已将其放在项目下的文件夹中。 文件夹

  • 问题内容: 我正在尝试将图像从Android Phone(HTC Desire HD)上传到FTP服务器(在我的本地PC上)。图像将发送到FTP服务器,但已损坏。 并且方法(ftpClient.storeFile())引发IOException(错误的文件号) 请帮我。 这是损坏的图像链接: http://imageshack.us/photo/my- images/820/komikb.jpg/

  • 我有一个Android应用程序,它需要在一个循环中显示图像和视频,播放视频没有问题,但当它到达图像时,屏幕变为空白,什么也没有发生。程序仍在运行,只是没有显示。 我正在使用SurfaceView。setBackground()来绘制图像,因为在播放视频的ImageView和SurfaceView之间进行交换之前会导致问题。 我在显示视频时遇到了类似的问题,我通过删除等待视频准备的循环来解决它,因此

  • 我在下载图像和更新ImageView时遇到问题,我正在使用ExecutorServices下载图像,但我面临的问题是,作为场景,我正在使用基本适配器在列表中显示Imageview。图像被下载,但这两个图像都只在firstImage View中更新。 所以位图在同一个imageView中得到了更新,有人遇到过类似的问题吗 例如,我正在下载2个图像,它正在创建2个ImageDownloader实例,所