Codenameone 存储中的临时png文件未上载

Codenameone 存储中的临时png文件未上载,codenameone,Codenameone,好吧,我不认为这是cn1的问题,但我已经没有选择了。我有一个应用程序,我一直在使用Capture.capturePhoto让用户能够用他们的设备抓拍照片并将其上传到我的服务器。几个月来一直工作得很好。有人要求我添加从手机照片库上传照片的功能,我认为这很简单,但在弄清楚如何缩小图像比例并将其存储在存储器中后,我现在被它难倒了,只需将0字节发送到我的服务器 我知道这不是我的服务器,它没有改变,仍然可以上传来自不同来源的文件,包括cn1应用程序中的照片捕获的文件 下面是上传照片的代码 private

好吧,我不认为这是cn1的问题,但我已经没有选择了。我有一个应用程序,我一直在使用Capture.capturePhoto让用户能够用他们的设备抓拍照片并将其上传到我的服务器。几个月来一直工作得很好。有人要求我添加从手机照片库上传照片的功能,我认为这很简单,但在弄清楚如何缩小图像比例并将其存储在存储器中后,我现在被它难倒了,只需将0字节发送到我的服务器

我知道这不是我的服务器,它没有改变,仍然可以上传来自不同来源的文件,包括cn1应用程序中的照片捕获的文件

下面是上传照片的代码

private void uploadImage(String filename, String name) throws IOException {
    String ext = filename.substring(filename.lastIndexOf('.') + 1).toLowerCase();
    if (ext.equals("jpg") || ext.equals("jpeg") || ext.equals("pjpeg") || ext.equals("png")) {
        MultipartRequest request = new MultipartRequest() {
            Hashtable h;
            @Override
            protected void readResponse(InputStream input) throws IOException {
                JSONParser p = new JSONParser();
                h = p.parse(new InputStreamReader(input));
                super.readResponse(input);
            }

            @Override
            protected void postResponse() {
                List<Map<String, Object>> media = (List<Map<String, Object>>)h.get("media");
                Dialog.show("Photo Uploaded", media.size() + " photo(s) uploaded and available to send.", "OK", null);
            }
        };
        request.setUrl(MyApplication.IMGSERVER);
        request.setPost(true);
        request.addData(name, filename, "image/" + ext);
        request.addRequestHeader("X-Dart-Token", token);
        NetworkManager.getInstance().addToQueue(request);
    } else {
        Dialog.show("Invalid Photo Format", "The photo format (" + ext+ ") is not supported. Try with jpg or png.", "OK", null);
    }
}
我特意在上面的代码片段中删去了很多相关的代码,以关注我认为重要的内容


我在调试时使用的对话框语句中留下了内容,以便查看设备上的路径。如果我在模拟器中运行它,并选择一个文件,它可以很好地上传,但是当我在iPhone上运行它时,发送到服务器的文件有0个字节,uploadImage方法中的对话框将显示“上传了0张照片”。在“tempfile.png”上使用Storage.g.entrySize()时,会显示文件大小不是0。如何正确引用此文件以将其发送到服务器。

您正在将库图像保存到
存储
,但上载方法适用于那些不兼容的
文件系统存储
,因此会出现不兼容的行为

我更改了此行OutputStream out=Storage.getInstance().createOutputStream(文件名);OutputStream out=FileSystemStorage.getInstance().openOutputStream(文件名);得到同样的结果。正确的方法是什么?在
FileSystemStorage
中,您需要完整的绝对路径,而不是文件名。因此,您需要预先设置应用程序主目录路径。我想这就是我正在做的,但我仍然得到0字节。字符串tmpFilepath=FileSystemStorage.getInstance().getAppHomePath()+文件名;是显示具有tmpFilepath值的对话框的图像。请确保在“保存”和“打开”中都使用完整路径。出于某种原因,我假设FileSystemStorage.getInstance().openOutputStream(“文件名”)将在AppHomePath目录中创建一个名为“文件名”的新文件。-非常感谢。
Display.getInstance().openGallery(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent actionEvent) {
        if (actionEvent != null && actionEvent.getSource() != null) {
        String filepath = (String)actionEvent.getSource();
        if (filepath != null) {
            // scale down the image
           String filename = "tempfile.png";
           boolean success = false;
           if (Storage.isInitialized()) {
               try {
                   OutputStream out = Storage.getInstance().createOutputStream(filename);
                   ImageIO.getImageIO().save(filepath, out, ImageIO.FORMAT_PNG, 500, -1, 1);
                   out.close();
                   success = true;
                } catch (IOException e1) {
                    Log.p("image scaling failed " + e1.getMessage());
                    Dialog.show("Photo Upload", "Unable to scale photo:" + e1.getMessage(), "OK", null);
                }
                if (success) {
                    // open dialog and have user provide name
                    try {
                        String tmpFilepath = FileSystemStorage.getInstance().getAppHomePath() + filename;
                        Dialog.show("Image File", tmpFilepath, "OK", null);
                        uploadImage(tmpFilepath, name);
                    } catch (IOException err) {
                        Log.p("Image Upload Failed:" + err.getMessage());
                        Dialog.show("Picture Uploaded Failed", "Something prevented the upload of the image.", "OK", null);
                    }
                }
            }
        }
    }
}