在JAVA中上传时出错“message [java.lang.IllegalArgumentException:im == null!]”

时间:2010-11-11 07:44:42

标签: java file-upload dwr fileoutputstream

我正在尝试上传图片文件和zip文件。首先我开始使用图片上传,它给了我message[java.lang.IllegalArgumentException: im == null!错误。但是,它仍然上传了图像。然后我添加了上传zip文件的代码。现在我也得到同样的错误。但是,与上次不同,图像只会上传,其大小为0字节。

我正在使用DWR将数据带到服务器,

DWR脚本:

function uploadImage(){
var image = dwr.util.getValue("uploadImage");
var file = dwr.util.getValue("uploadFile");
dwr.util.setValue("uploadImage", null);
dwr.util.setValue("uploadFile", null);
DataUpload.uploadData(image, file, function(data){
    if(data != null){
        $("#imgURL").html("<p>Upload Completed!!!</p>");
        $("#imgURL").append("Location: "+data.path1);
        $("#zipURL").html("<p>Upload Completed!!!</p>");
        $("#zipURL").append("Location: "+data.path2);
    }
});

}

这是我正在尝试的CODE。

public class DataUpload {
private static String DATA_STORE_LOC = "D:/Uploaded/Trials/";
public Path uploadData(InputStream image, InputStream file) throws IOException{
Path path = new Path();
BufferedImage img = ImageIO.read(image);
Date date = new Date();
DateFormat format = new SimpleDateFormat("ss");
String dat = format.format(date);
System.out.println(dat);
try {
    path.setPath1(DATA_STORE_LOC+dat+".jpg");
    System.out.println(DATA_STORE_LOC+dat+".jpg");
    ImageIO.write(img, "jpeg", new File(DATA_STORE_LOC+dat+".jpg"));
    System.out.println(true);
    byte[] buffer = new byte[1024];
    int len;
    File f2 = new File(DATA_STORE_LOC+dat+".zip");
    path.setPath2(DATA_STORE_LOC+dat+".zip");
    OutputStream out = new FileOutputStream(f2);
    while((len = file.read(buffer)) > 0){
            out.write(buffer, 0, len);
    }
    file.close();
    out.close();
} catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
}
return path;

}

更新:控制台日志

49 //System.out.println(dat);
D:/Uploaded/Trials/49.jpg //System.out.println(DATA_STORE_LOC+dat+".jpg");
745859 [18820833@qtp-7494106-7] WARN  org.directwebremoting.dwrp.BaseCallMarshaller  - --Erroring: batchId[1] message[java.lang.IllegalArgumentException: im == null!]

最终更新

我试图通过评论其他部分来单独上传zip文件。它上传。但它的大小也是零字节!!!

我哪里错了????

任何建议!!!

1 个答案:

答案 0 :(得分:0)

您无法在上传字段中获取文件的二进制值。 dwr.util.getValue("uploadImage");的值是文件的路径,如果浏览器不允许您读取本地文件路径,则为空。所以基本上你提交的是文本,或者只是尝试将其作为文件读取。

我曾经在DWR应用程序中实现了上传文件,但我使用了iframe来处理文件上传功能。最近的浏览器(FF3.6 +,Safari4 +,Chrome)支持使用XHR发送文件,但不要指望您的用户使用它们。

您可以使用FileUploader等库来为您处理此问题,他们甚至可以为服务器端提供Java示例。它使用XHR(如果可用)并返回iframe变通方法。