好吧,我不相信这是一个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);
}
}
以下是从图库中获取和缩放照片的相关代码部分
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);
}
}
}
}
}
}
我故意在上面的代码段中删除了很多周围的代码,专注于我认为重要的内容。
我留在我用于调试的Dialog语句中,所以我可以看到设备上的路径是什么。如果我在模拟器中运行它,并选择一个文件,它上传很好,但是当我在iPhone上运行它时,发送到服务器的文件有0个字节,而uploadImage方法中的Dialog将显示&#39; 0张照片已上传&#39;。在&#34; tempfile.png&#34;上使用Storage.g.entrySize()时它显示文件大小不是0。如何正确引用此文件以将其发送到服务器。
答案 0 :(得分:1)
您要将图库图片保存到Storage
,但上传方法适用于那些不兼容的FileSystemStorage
,因此您会遇到不兼容的行为。