javascript - 如何将文件从 JavaScript 发送到 Java WebService

标签 javascript java android web-services cordova

我有一个 HTML5 应用程序,使用 Cordova,您可以从您的设备上传文件(图像和视频)。而我必须将用户上传的这个文件发送到Java WebService,然后再上传到服务器。

我需要帮助,因为我无法实现我想要的。我尝试了在 Internet 上找到的几种解决方案,但没有成功。

WeService 返回下一个异常:

[org.apache.tomcat.util.http.fileupload.FileUploadBase$InvalidContentTypeException: the request doesn't contain a multipart/form-data or multipart/mixed stream, content type header is null]

这是我现在的代码:

HTML:

<section id="uploadMedia">
    <input type="file" name="fileMedia" id="fileMedia" >
</section>

JS:

var file = $("#uploadMedia").find("#fileMedia")[0].files[0];
if (typeof file !== "undefined") {
    uploadFile(file);
}

 var uploadFile = function(file, callback) {
        // Create a new FormData object
        var formData = new FormData();
        formData.append('file', file);

            $.ajax({
                url: WEBSERVICE_URL + "uploadFile",
                beforeSend: function(xhr) {
                    if (WEBSERVICE_USER !== "") {
                        xhr.setRequestHeader("Authorization", "Basic " + btoa(WEBSERVICE_USER + ":" + WEBSERVICE_PASS));
                    }
                },
                data: formData,
                method: "POST",
                processData: false, // tell jQuery not to process the data
                contentType: false, // tell jQuery not to set contentType
                success: function(data, textStatus, jqXHR) {
                    alert(data);
                },
                error: function(jqXHR, textStatus, errorThrown) {
                    alert("ERROR");
                },
                complete: function(jqXHR, textStatus) {
                    if (typeof callback === "function") {
                        callback();
                    }
                }
            });
    };

Java:

@MultipartConfig
@WebServlet(name = "uploadFile", urlPatterns = {"/uploadFile"})
public class UploadFile extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        response.setContentType("application/json;charset=UTF-8");
        try (PrintWriter out = response.getWriter()) {
            String json = "";

            Part file = request.getPart("file");
            String filename = "xcvxcv";
            InputStream filecontent = file.getInputStream();

            json = "File " + filename + " successfully uploaded";
            out.print(json);                
        }
    }
}

我非常感谢各种帮助。

最佳答案

几天前我终于找到了解决方案。所以,我会为这个想知道的人回答我的问题。

JS:

var file = $("#file").files[0]; //this is the input where I can choose the file
var formData = new FormData();
formData.append('file', file);

var xhr = new XMLHttpRequest();
xhr.open('POST', '/myWebServiceUrl');
xhr.onload = function () {
    //TODO show the progress
};

xhr.onreadystatechange = function () {
    if (xhr.readyState === 4) {
        //TODO success callback
    }
};

xhr.upload.onprogress = function (event) {
    //TODO show the progress
};

xhr.send(formData);

Java:

Part filePart = request.getPart("file");
String fileName = String.valueOf("fileName");
File file = new File("/the/path/" + fileName);
OutStream outFile = new FileOutputStream(file);
InputStream filecontent = filePart.getInputStream();

int read = 0;
byte[] bytes = new byte[1024];
while ((read = filecontent.read(bytes)) != -1) {
    outFile.write(bytes, 0, read);
}

如果您想了解更多信息,请直接询问。希望对您有所帮助!!

关于javascript - 如何将文件从 JavaScript 发送到 Java WebService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33631293/

相关文章:

访问 adb 时未找到 Android findstr

javascript - 我无法弄清楚下面的 javascript 代码有什么问题。我尝试将函数存储在变量中

javascript - 错误: Could not resolve 'storysolo' from state 'index'

javascript - 跟踪 Meteor 服务器控制台

javascript - 使用 jQuery 更改依赖于滚动位置的类时遇到问题

android - 如何缩放到足以展开带有 Android Maps Extensions 的群集?

Java2D 与 Javafx Canvas 性能对比

Java将8位数字转换为10位数字

java - 如何设置一个 View ,当用户单击手机的后退按钮时,它返回到同一个java类中的 View

android - Firebase:服务中的 onDisconnect()